Release version control
지금까지 이미지의 tag 를 그냥 타임스탬프를 이용하여 구분짓고 latest 로 기져오면서 코드를 짜고 있었는데, 실제 이미지의 버전정보를 그냥 아무 숫자나 가져다 쓰지는 않는다고 한다.
그래서 github 에서 repo 의 태그를 생성하고 버전으로 사용하는 방법을 찾아보자.
github actions marketplace 에서 원하는 기능을 제공하는 소스코드를 찾았다.
<https://github.com/marketplace/actions/github-tag>
소스코드의 메커니즘을 보면 secrets 에서 토큰을 받아와 접근 인가를 받고 steps 에 태그를 생성해서 가져다 쓰는 것 같다.
태그를 커스터마이징 하거나, 브랜치 별로 선택할 수도 있는 것 같아서 default 를 false 로 해두고 commit message 로 버전을 컨트롤 할 수 있게 했다.
- name: Bump version and push tag
id: tag_version
uses: mathieudutour/github-tag-action@v6.1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
default_bump: false
# fix: - patch, feat: - minor, BREAKING CHANGE: - major
- name: Create a GitHub release
uses: ncipollo/release-action@v1
with:
tag: ${{ steps.tag_version.outputs.new_tag }}
name: Release ${{ steps.tag_version.outputs.new_tag }}
body: ${{ steps.tag_version.outputs.changelog }}
- name: Build and Push
uses: docker/build-push-action@v4
with:
context: lion_app # location where image will be built
push: true # This indicates push event
# tags: ${{ env.IMAGE_TAG }},"${{ env.IMAGE }}:${{ steps.timestamp.outputs.timestamp }}"
tags: ${{ env.IMAGE_TAG }},"${{ env.IMAGE }}:${{ steps.tag_version.outputs.new_tag }}"
platforms: linux/amd64,linux/arm64
github 에서도, ncp container registry 에도 태그로 이미지가 잘 푸쉬되는 것을 확인 했다.
이제 이 데이터를 argoCD 로 전달하여 최신 버전의 이미지 정보를 불러오게 해야한다.
argoCD 에서 참조하는 helm-chart 를 보면 하드 코딩으로 값이 들어가 있는데 이걸 변경해 주어야 이미지 태그 값을 불러올때 참조해서 가져오게 된다.
# Chart.yaml
apiVersion: v2
name: lion
description: lion-app
type: application
version: 0.1.0
appVersion: "0.4.0"
그러나 현자 lion-app 의 repo 와 k8s repo 는 서로 분리되어 있는 상태이기 때문에 권한설정과 checkout 을 설정해줘야 한다.
CD 부분에서 필요한 작업들을 진행해보자.
# CD.yaml
...
steps:
- name: Checkout Helm repository
uses: actions/checkout@v3
with:
repository: IvaninITworld/k8s_study
ref: main
token: ${{ secrets.k8s_token }}
먼저 해당 repo 로 넘어가는 부분을 구현하자면, workflow 가 동작하는 github 에서 k8s 가 저장되어 있는 repo 로 이동하게 설정한 뒤, k8s repo 에 접근하기 위해 설정한 PAT 를 토큰으로 사용할 수 있게 설정한다.
# CD.yaml
...
on:
release:
types: [published]
...
...
- name: Update appVersion in Chart.yaml
run: |
echo "Using version tag: ${{ github.event.release.tag_name }}"
sed -ie 's/appVersion: ".*"/appVersion: "'${{ github.event.release.tag_name }}'"/g' lion/Chart.yaml
release 관련 이벤트가 발생하게 되면 동작하게 워크플로우를 구성했고, 거기서 tag_name 을 가져와 사용하게 코드를 구현했다.
sed 를 이용하여 코드로 접근해서 수정하도록 만들었다.
이제 수정을 했으니 commit 을 만들어야 한다.
# CD.yaml
- name: Commit files
run: |
git config --local user.email "email@email.com"
git config --local user.name "github-actions[bot]"
git commit -a -m "update tag"
저장된 git config 정보를 이용하여 커밋을 하도록 만든다.
마무리 push 역시 토큰 정보를 이용해 권한 문제를 해결하자. 기능 실행은 오픈소스코드를 이용했다.
# CD.yaml
- name: Push changes
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.k8s_token }}
repository: IvaninITworld/k8s_study
branch: main
마지막으로 테스트를 진행했을 떄, actions 도 동작을 잘 했고 데이터가 업데이트 된 것도 확인 했다.
'Dev. > Github Actions' 카테고리의 다른 글
[Cloud] Github Actions: Lint (0) | 2023.08.30 |
---|---|
[Cloud] Github Actions: Code develop for TEST (0) | 2023.08.29 |
[Cloud] Github Actions: Concept of CI (0) | 2023.08.28 |
[Cloud] CD: Github Actions - TEST & act (0) | 2023.08.24 |
[Cloud] CD: Github Actions - workflow_run & Dependency (0) | 2023.08.23 |
댓글