CI/CD 파이프라인 리서치
GitHub
를 사용하여 단순한 CI(Continuous Integration)를 구성하는 방법을 소개하는 글입니다.
Prerequisite
이 문서는 다음 환경을 기반으로 작성했습니다.
- Windows 10
- Docker Desktop + enable Kubernetes Cluster
- Helm
The package manager for Kubernetes - GitHub Actions
Automate your workflow from idea to production. Get Started with Actions. - Skaffold (Optional)
Command line tool that facilitates CI for Kubernetes-native applications.Docker is Updating and Extending Our Product Subscriptions
Aug 31 2021, The Docker Subscription Service Agreement has been updated.
GitOps 소개
GitOps 는 쿠버네티스에서 실행되는 앱을 유지 관리하고 업데이트 하는 빠르고 안전한 방법입니다.
GitOps 의 주요 구성요소는 다음과 같습니다:
GitOps = IaC + MRs + CI/CD
- IaC: Infrastructure as code
- MRs: uses Merge Requests
- CI/CD: GitOps automates infrastructure updates using a Git workflow with continuous integration and continuous delivery
파이프라인 소개
elio 프로젝트를 사용하여 파이프라인을 설명하겠습니다.
먼저, 샘플 프로젝트 elio 를 소개하겠습니다.
elio
elio
는 epoll 기반의 네트워크 라이브러리 입니다.
elio/app/herald
는 라이브러리를 사용한 샘플 앱으로
emqx
메시지 브로커의 pub/sub 을 테스트할 수 있습니다.
- 실행하기
$ git clone https://github.com/cppis/elio-state $ cd elio-state $ helm install herald herald
- 테스트하기
$ telnet localhost 33133
NodePorts are in the 30000-32767 range by default.
파이프라인 구조
저장소
- Code 저장소:
elio
- State 저장소:
elio-state
- Image 저장소: Docker Hub 의
cppis/herald
를 사용합니다.
CI(Continuous Integration)
GitHub Action 을 사용하여 GitHub 저장소에서 직접 사용자 지정 CI(지속적 통합) 및
CD(지속적 배포) Workflow 를 만들 수 있습니다.
Action Secret 저장하기
Action 을 실행할 때 필요한 정보를 저장합니다.
Settings
> Secrets
> Actions
에 Docker Hub 계정과 비밀번호를 저장합니다.
DOCKER_USERNAME
: Docker Hub 계정DOCKER_PASSWORD
: Docker Hub 계정 비밀번호
GitHub Action Workflow
GitHub 저장소만 있으면 GitHub Action Workflow 를 만들고 실행할 수 있습니다.
Workflow 는 저장소의
.github/workflows
에 있는 파일입니다.
Workflow 에 대한 소개는 GitHub Actions 를 위한 빠른 시작을 참고하세요.
elio
의 Workflow 확인하기
- build-app.yml:
dev 브랜치에 push 하면, ./app 내의 모든 프로젝트를 Go 1.16 버전으로 빌드합니다.name: Build App on: push: branches: [dev] pull_request: branches: [dev] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Go uses: actions/setup-go@v2 with: go-version: 1.16 - name: Build run: go build -v ./app/... - name: Test run: go test -v ./...
-
publish-app.yml:
tags 에 push 하면,app/herald
를 도커허브cppis/herald
에 배포하고,
소개 문서를 업데이트합니다.name: Publish App on: push: # Sequence of patterns matched against refs/tags tags: - "v*" # Push events to matching v*, i.e. v1.0 jobs: push_to_registry: name: Push Docker image to Docker Hub runs-on: ubuntu-latest steps: - name: Check out the repo uses: actions/checkout@v2 - name: Log in to Docker Hub uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 with: username: $ password: $ - name: Extract metadata (tags, labels) for Docker id: meta uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 with: images: cppis/herald - name: Build and push Docker image uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc with: context: . file: app/herald/k8s-resources/Dockerfile push: true tags: $ labels: $ - name: Image digest run: echo $ - name: Docker Hub Description uses: peter-evans/dockerhub-description@v2 with: username: $ password: $ repository: cppis/herald readme-filepath: app/herald/hub.md
Workflow 확인하기
- GitHub 저장소 이름 아래에서 Actions 를 클릭합니다.
- 왼쪽 사이드바에서, 원하는 Workflow 를 선택합니다.
- 만약 수동으로 실행하기 원한다면, Run workflow 를 선택합니다.
- 브랜치 드롭다운에서 workflow 브랜치를 선택하고, 파라미터를 입력한 후. Run workflow 를 클릭합니다.
새 Workflow 생성하기(선택)
.github/workflows
에 새 Workflow 파일을 추가하려면, GitHub: 새 파일 생성하기를 참고하세요.
GitHub Action 의 상태를 뱃지로 쉽게 추가할 수 있습니다.
도커 허브 확인하기
Workflow 가 성공하면, 도커 허브에서 cppis/herald
를 확인합니다.
peter-evans/dockerhub-description
GitHub Action 을 사용하여 소개 문서도 확인할 수 있습니다.
댓글남기기