>웹 프론트엔드 >JS 튜토리얼 >Docker를 사용한 크로스 플랫폼 CI/CD 액션 구축

Docker를 사용한 크로스 플랫폼 CI/CD 액션 구축

DDD
DDD원래의
2025-01-30 00:31:09986검색

지난 주에 나는 두통에 맞았습니다. 그런 다음 플랫폼에 관계없이 실제로 동일한 자동화를 실행하고 싶다는 것을 깨달았습니다. 그래서 나는 github, gitlab 및 bitbucket에서 실행되는 크로스 플랫폼 CI 자동화를 구축하기 위해 퀘스트를 시작했습니다. 이 솔루션은 간단한 GitHub 액션으로 시작되었지만 여러 코드 호스팅 플랫폼을 지원해야 할 때 더 강력한 것으로 발전했습니다.

나는 정확한 과정을 안내합니다 :

간단한 시작, Github 액션이 어떻게 작동하는지 보여 드리겠습니다 재사용 가능한 도커 이미지를 빌드하기 위해 레벨 업

마지막으로 각 플랫폼 에서이 작업을 실행하는 방법을 보여 드리겠습니다

첫 번째 크로스 플랫폼 액션을 구축하고 배송하려면 단계를 따라 가십시오. 또는 나중에 기사를 북마크하십시오.

    tl; dr 템플릿 저장소를 참조합니까 ???
  1. 1. 간단한 시작 : github 동작에서 JavaScript를 실행하십시오
  2. GitHub 액션을 실행합니다
  3. JavaScript 파일을 실행하는 가장 간단한 GitHub 동작부터 시작하겠습니다. 먼저 저장소의 루트에서 index.js를 작성하십시오 :

이제 워크 플로 파일을 만듭니다 .github/workflows/hello.yml :

<:>이 행동은 다음과 같습니다

메인 브랜치로 푸시시 방아쇠 리포지토리를 확인하십시오 node.js 환경을 설정하십시오 스크립트를 실행하십시오

재사용 가능합니다

이제,이 조치를 별도의 저장소로 옮겨서 재사용 할 수 있도록합시다. 이 파일을 사용하여 새로운 Github 저장소 (예 : 여기 내 예와 같은 Hello-World-Action)를 만듭니다.

index.js (이전과 동일) :


console.log("Hello World");

action.yml :

name: Hello World
on:
  push:
    branches:
      - main

jobs:
  hello:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: "20"
      - name: Say Hello
        run: node index.js

이제 워크 플로에서 참조 하여이 작업을 모든 저장소에서 사용할 수 있습니다.

주요 차이점은 다음과 같습니다
    행동은 자체 저장소 에 산다 action.yml action을 실행하는 방법 다른 저장소는 사용을 사용하여이를 참조 할 수 있습니다
  1. 2. 레벨 업 : Dockerized TypeScript 동작
  2. 이제 TypeScript 코드를 실행하는보다 정교한 작업을 작성합시다. 여러 파일이 필요합니다 :
  3. 프로젝트를 초기화하고 TypeScript :
를 설정하십시오

<.> Build 스크립트를 추가하려면 package.json을 업데이트하십시오
  1. 그런 다음 index.js를 index.ts로 바꾸어 JavaScript 대신 TypeScript를 사용하여 SRC 디렉토리로 이동합니다.
tsconfig.json을 만들려면 TypeScript 컴파일 : 를 구성하십시오
console.log("Hello World");

  1. dockerfile : 를 만듭니다
console.log("Hello World");

    action.yml의 동작을 재정의합니다.
name: Hello World
on:
  push:
    branches:
      - main

jobs:
  hello:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: "20"
      - name: Say Hello
        run: node index.js

로커 이미지를 로컬로 실행합니다

DockerFile에 정의 된 이미지를 로컬로 빌드하고 실행하려면 Docker Desktop 앱이 필요합니다. 그런 다음 Docker가 로컬에서 실행 중이라고 가정하면 다음을 수행 할 수 있습니다

<:> 이미지 구축 :

  1. 실행 :
console.log("Hello World");

  1. 3. 크로스 플랫폼 지원
  2. 이제 다른 플랫폼에서 동작을 실행하는 가장 흥미로운 부분입니다. 우리는 필요합니다 :
Docker 이미지를 레지스트리로 빌드하고 밀어 넣으십시오 플랫폼 별 구성 에서 참조하십시오
name: "Hello World Action"
description: "A simple action that says hello"
runs:
  using: "node20"
  main: "index.js"

도커 이미지 구축 및 출판

먼저 릴리스마다 Docker 이미지를 빌드하고 밀기위한 워크 플로우를 만듭니다. GitHub (공개 리포지토리 무료, 무료 계획의 개인 저장소 용 500MB)와 함께 제공되는 GitHub Container Registry (GHCR)를 사용할 것입니다.

    Github 동작
  1. 다른 저장소의 github 조치 에서이 작업을 사용하려면 .github/Workflows/Hello.yml에서 워크 플로 파일을 만듭니다 (Github 조치 워크 플로우 구문 문서 참조) : .
  2. github 동작에 대해서만이 작업을 실행 해야하는 경우 Docker 이미지를 빌드하고 푸시 할 필요가 없습니다. GitHub Actions는 각 워크 플로 실행에서 ACTION.YML 파일에 지정된 DockerFile에서 Docker 컨테이너를 직접 빌드합니다. 이것은 컨테이너 레지스트리를 밀고 당기는 추가 단계를 피하기 때문에 더 효율적입니다. 그러나이 작업을 Gitlab 또는 Bitbucket과 같은 다른 CI 플랫폼에서 사용하려는 경우 위에 표시된대로 Docker 이미지를 게시해야합니다. Github의 무료 계획은 세 플랫폼 중에서 가장 관대 한 CI/CD 분 할당을 제공합니다. 포함 :
공공 리포지토리의 경우 무제한 분 개인 저장소의 경우 /> 2,000 분/월

gitlab ci 구성
.gitlab-ci.yml을 작성하십시오 (Gitlab CI/CD 문서 참조) :

name: Use Hello Action
on:
  push:
    branches:
      - main

jobs:
  hello:
    runs-on: ubuntu-latest
    steps:
      - name: Say Hello
        uses: your-username/hello-world-action@main

귀하의 gitlab 무료 계획에는 저장소가 공개적이거나 개인이든 상관없이 월 400 CI/CD 컴퓨팅 분야가 포함됩니다.

비트 버킷 파이프 라인

bitbucket-pipelines.yml 만들기 (Bitbucket 파이프 라인 문서 참조) :


Bitbucket의 무료 계획에는 저장소가 공개적이든 개인인지 여부에 관계없이 한 달에 50 분 만 포함되어 있으므로 세 플랫폼 모두에서 가장 낮은 자유 계층이됩니다.

다른 CI/CD 플랫폼
pnpm init                # Creates package.json
pnpm add -D typescript   # Install TypeScript as dev dependency

공개 github 컨테이너 레지스트리에 Docker 이미지를 게시 했으므로 Docker 이미지를 지원하는 모든 플랫폼에서이를 실행할 수 있습니다. 이것은 다음과 같이 뒷받침됩니다

Circle Ci (Docs) Travis Ci (Docs)

당신이 다른 곳으로이를 실행한다면 알려주세요, 나는 당신의 사용 사례에 대해 궁금합니다! .

? 이것으로 무엇을 할 수 있습니까?

우리는 모든 CI 플랫폼에서 웹 및 모바일 앱을위한 자동 Lingo.dev 로컬라이즈를 실행하는 조치를 구축했습니다. 모든 커밋에서 Lingo.dev 현지화 엔진을 사용하여 전체 저장소에서 번역을 업데이트합니다. github의 예 :

사용중인 코드 호스팅 플랫폼에 관계없이 재사용 가능한 작업을 구축하고 워크 플로에 쉽게 통합 할 수 있습니다. 다음은 여러분을위한 몇 가지 아이디어입니다 :

크로스 플랫폼 테스트 리포터 (오케스트레이션 엔드 투 엔드 테스트 세션) 사용자 정의 코드 품질 검사기 (포맷, 라인, 테스트 생각) 릴리스 노트 생성기 (웹 사이트에 Changelog를 게시하는 것은 어떻습니까?)
console.log("Hello World");

무엇을 사용 하시겠습니까?
? 보너스 : 템플릿 저장소

나머지 기사를 읽고 싶지 않다면 여기에 모든 코드가 포함 된 템플릿 스타터 저장소를 찾을 수 있습니다. 액션이 포함되어 있습니다 - Github, Gitlab 및 Bitbucket에서 실행할 수 있습니다. https://github.com/mathio/awesome-action-starter

    ? 팁 : 레포를 복제하고 자신의 행동을위한 출발점이됩니다.
  • 결론
  • 우리는 간단한 쉘 기반 github 동작에서 어디서나 실행할 수있는 정교한 타입 스크립트 액션으로 진화하는 방법을 보았습니다. 주요 테이크 아웃은 다음과 같습니다
  • 자동화 로직을 검증하기 위해 쉘 명령으로 간단한 시작을 시작하십시오. 는 당신의 행동을 조용하여 휴대용
  • 를 만들어줍니다 컨테이너 레지스트리를 사용하여 플랫폼에 동작을 배포하십시오 docker 의 핵심 논리를 유지하면서 각 플랫폼의 구성을 조정합니다.

    이 접근법은 단일 코드베이스를 유지하면서 어디서나 자동화를 실행할 수있는 유연성을 제공합니다. 행복한 자동화!

    나는 때때로 Twitter에서 기술과 새로운 lingo.dev 기능에 대해 @mathio28로 게시합니다. 연락을 계속합시다.

위 내용은 Docker를 사용한 크로스 플랫폼 CI/CD 액션 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.