Docker 프로젝트용 CI-CD(지속적 통합 지속적 배포) 솔루션을 만드는 방법
이 게시물은 도커 프로젝트를 위한 지속적인 통합 및 지속적인 배포 솔루션을 구축하는 방법에 대한 것입니다. 모든 코드는 GitHub 및 Docker Hub에 있습니다. 나는 다른 사람들이 그 자동화를 즐기고 그것을 구축하는 데 주말을 낭비하지 않도록 내 여정을 공유합니다.
목표
이 빌드가 끝나면 Docker 허브에서 다른 버전의 애플리케이션을 빌드하고 게시하기 위한 두 개의 GitHub 작업이 있습니다.
릴리스 버전: 릴리스가 GitHub에 게시될 때마다 버전 번호가 일치하는 컨테이너 태그가 빌드되고 게시됩니다. (예: myapp:v1)
베타 버전: GitHub의 내 브랜치에서 푸시할 때마다 컨테이너가 특정 태그와 함께 게시됩니다. 태그는 초안 릴리스 버전 번호와
-beta
를 일치시킵니다. (예: myapp:v2-베타).이 게시물에서 애플리케이션은 Node.js Twitch 챗봇입니다. 응용 프로그램의 유형은 배달에 중점을 두는 것이 중요하지 않습니다.
릴리스 버전 게시
릴리스가 GitHub에 게시될 때마다 워크플로가 트리거됩니다. 먼저 "릴리스 버전"을 검색한 다음 컨테이너를 빌드하고 태그를 지정하고 마지막으로 Docker 허브에 게시(일명 푸시)합니다. "릴리스"는 "안정적인"버전이기도 하므로 컨테이너 태그도 업데이트합니다
latest
.GitHub Action의 전체 YAML 정의를 살펴보고 나중에 분석하겠습니다.
name: Release Docker Image CI
on:
release:
types: [published]
jobs:
update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set outputs
id: vars
run: echo ::set-output name=RELEASE_VERSION::$(echo ${GITHUB_REF:10})
- name: Publish to Registry
uses: elgohr/Publish-Docker-Github-Action@master
with:
name: ${{secrets.DOCKER_USER}}/cloudbot
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PASSWORD }}
tags: "latest,${{ steps.vars.outputs.RELEASE_VERSION }}"
워크플로가 트리거되는 횟수를 제한하기 위해
on: release
및 type: published
를 사용했습니다. 원하는 대로 조정합니다.다음 흥미로운 부분은 단계 vars의 라인입니다.
- name: Set outputs
id: vars
run: echo ::set-output name=RELEASE_VERSION::$(echo ${GITHUB_REF:10})
여기에서는 환경 변수
GITHUB_REF
(처음 10개의 스트라이프에 "refs/tags/"가 포함됨)를 사용하여 로컬 변수RELEASE_VERSION
를 초기화합니다. 값은 YAML의 마지막 줄과 같이 해당 단계의 출력에서 사용할 수 있습니다.tags: "latest,${{ steps.vars.outputs.RELEASE_VERSION }}"
id vars로 식별된 단계에서 출력에서
RELEASE_VERSION
값을 검색했습니다.이 GitHub Action에서는 elgohr/Publish-Docker-Github-Action@master이 간단하고 필요한 작업을 수행했기 때문에 사용했습니다.
docker/github-actions
를 선호하거나 사용하는 경우 docker 명령을 직접 실행할 수 있습니다.GitHub marketplace에서 사용할 수 있는 많은 옵션이 있습니다.
베타 버전 게시
GitHub에서 푸시가 완료될 때마다 워크플로가 트리거됩니다. 초안 모드에서 가장 최근 릴리스의 "릴리스 버전"을 먼저 검색합니다. 워크플로는 검색된 버전에 대해 발생하고
-beta
이를 사용하여 컨테이너에 태그를 지정합니다. 마지막으로 Docker 허브에 게시(일명 푸시)합니다.다시 한 번, 여기에 전체 YAML이 있습니다. 나중에 분해하겠습니다.
name: Build Docker Images
on: [push]
jobs:
build:
name: cloudbot-beta
runs-on: ubuntu-latest
steps:
- id: last_release
uses: InsonusK/[email protected]
with:
myToken: ${{ github.token }}
exclude_types: "release, prerelease"
view_top: 1
- uses: actions/checkout@v2
- name: Publish to Registry
uses: elgohr/Publish-Docker-Github-Action@master
with:
name: ${{secrets.DOCKER_USER}}/cloudbot
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PASSWORD }}
tags: "${{ steps.last_release.outputs.tag_name }}-beta"
여기서 어려움은 "미래"버전에서 태그를 만들고 싶었다는 것입니다. 모든 사람이 볼 수 없기 때문에 초안 릴리스를 사용하기로 결정했습니다. 따라서 미래처럼 보입니다.
마지막 릴리스가 버전 1(v1.0)인 경우 이 워크플로우를 가능하게 하려면 새 릴리스를 생성하고 Draft에 저장해야 합니다.
릴리스 워크플로와 마찬가지로 버전을 검색해야 합니다. 초안은 일부 사용자에게만 표시되기 때문에 액세스 권한이 필요합니다. 이것은
github.token
를 사용하여 쉽게 수행할 수 있습니다. GitHub Action이 시작되면 자동으로 생성됩니다.그런 다음 단계InsonusK/get-latest-release를 사용하여 버전을 검색합니다.
- id: last_release
uses: InsonusK/[email protected]
with:
myToken: ${{ github.token }}
exclude_types: "release, prerelease"
view_top: 1
이번에는 태그 값을 전달할 때 "-beta"를 연결합니다.
tags: "${{ steps.last_release.outputs.tag_name }}-beta"
마무리
그리고 짜잔, 컨테이너 프로젝트를 위해 매우 간단하고 구현하기 쉬운 ci-cd입니다. 다양한 옵션이 있으며 어떻게 작업을 수행했는지 알아보고 싶으신가요?
Reference
이 문제에 관하여(Docker 프로젝트용 CI-CD(지속적 통합 지속적 배포) 솔루션을 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/fboucheros/how-to-create-a-continuous-integration-continuous-deployment-ci-cd-solution-for-a-docker-project-31ka텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)