[GitOps]GitHub Action으로 CD 구성하기

Hoone·2021년 6월 5일
5
post-thumbnail

CD - Deploy

이전에 main branch에 병합되면 애플리케이션 이미지 생성과 배포하는 CD(build)를 구성했었습니다.
그 곳에 추가로 kubernetes 설정파일이 있는 저장소의 kustomization.yaml 파일에 새로 배포된 애플리케이션 이미지 버전을 작성하는 Deploy job을 추가해보겠습니다.

Personal Access Tokens

kubernetes 설정파일의 저장소에 파일을 수정해서 commit & push하기 위해서는 GitHub에 Personal Access Tokens이 필요합니다.

여기의 내용을 보고 따라하면 됩니다.

발급된 token을 GitHub Action에서 사용하기 위해 secrets에 추가합니다.
secrets 추가 방법은 여기를 참고하세요.
Value 에 복사한 personal access token을 삽입하고 추가합니다.

Deploy 작성

cd.yml 파일에 아래 내용을 추가 후 main branch에 push하면 Action이 실행됩니다.

  deploy:
    runs-on: ubuntu-latest
    # build job 완료 후 진행
    needs: build

    steps:
      - name: Get verion
        id: image
        run: |
          VERSION=$(echo ${{ github.sha }} | cut -c1-8)
          echo VERSION=$VERSION
          echo "::set-output name=version::$VERSION"
      
      # kustomize 명령을 가져온다.
      - name: Setup Kustomize
        uses: imranismail/setup-kustomize@v1

      - name: Checkout kustomize repository
        uses: actions/checkout@v2
        with:
          # kubernetes 설정정보 저장소
          repository: wlgns5376/example-app-kustomize
          ref: dev
          # 다른 저장소에 push 하려면 Personal Access Token이 필요.
          token: ${{ secrets.ACTION_TOKEN }}
          path: example-app-kustomize
      # 새 이미지 버전으로 파일 수정
      - name: Update Kubernetes resources
        run: |
          cd example-app-kustomize/overlays/dev/
          kustomize edit set image ${{ env.IMAGE_NAME }}:${{ steps.image.outputs.version }}
          cat kustomization.yaml
          
      # 수정된 파일 commit & push
      - name: Commit files
        run: |
          cd example-app-kustomize
          git config --global user.email "github-actions@github.com"
          git config --global user.name "github-actions"
          git commit -am "Update image tag"
          git push -u origin dev

Action 실행화면

Kubernetes 설정파일 저장소 확인

kubernetes 설정파일 저장소에 overlays/dev/kustomization.yaml 파일이 정상적으로 수정됐는지 확인합니다.

ArgoCD에 동기화 확인

앞서 ArgoCD에 Auto Sync가 활성화된 상태라서 동기화가 되었는지 확인해봅니다.


변경된 이미지 버전을 확인합니다.

이미 구성했던 CD를 블로그를 작성하면서 다시 구성하고 있어서 main branch가 아닌 dev에서 작업했습니다. GitHub에 올라간 실제 코드들은 main 기준이라서 이 내용과는 조금 다를 수 있습니다.

Next

다음글에서는 kubernetes의 configmap과 secret을 어떻게 관리할지에 대해 알아보겠습니다.

References:

profile
도움이 되고픈 개발자

0개의 댓글