728x90
300x250
구축까지 다 해놓고 보니
항상 문제가 생기는 부분은 여러 인원이 비슷한 시간대에 push를 하면 발생하는 문제다.
이럴 경우에 현재 상태로는 무조건 난리가 날거라서
이 부분에 대해 좀 수정했다.
name: Docker Image CI/CD on: push: branches: - main # main 브랜치에 코드가 푸시될 때 실행 concurrency: # 동시 push 방지를 위해 이전 워크플로우는 취소하도록 추가. group: deploy-${{ github.ref }} cancel-in-progress: true jobs: build-and-push: runs-on: ubuntu-latest steps: - name: Checkout Repository uses: actions/checkout@v2 with: persist-credentials: false # token 방식 적용을 위해 - name: Log in to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} # 위에서 만든 username 값 password: ${{ secrets.DOCKERHUB_TOKEN }} # 위에서 만든 Token 값 # tag 달기 추가 - name: Get short SHA id: vars run: echo "SHA_SHORT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV # set-output 사용 종료로 인한 변경 # Deployment YAML의 이미지 태그 변경 - name: Update image tag in deployment YAML run: | sed -i "s|image: jungjinlee90/github_jj:.*|image: jungjinlee90/github_jj:${{ env.SHA_SHORT }}|" kubernetes/k8s-deployment.yaml # Git 커밋 & 푸시 - name: Commit and push updated manifest env: GH_TOKEN: ${{ secrets.GH_PUSH_TOKEN }} run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" # 변경사항 stash git stash push -m "temp-changes" || echo "No changes to stash" # 최신 상태로 rebase git pull --rebase https://x-access-token:${GH_TOKEN}@github.com/${{ github.repository }}.git main # stash 복원 git stash pop || echo "Nothing to pop" # 변경사항 커밋 및 푸시 git add kubernetes/k8s-deployment.yaml git commit -m "Update image tag to ${{ env.SHA_SHORT }} [skip ci]" || echo "No changes to commit" # 여기서 무한 루프에 빠진다. commit 하면 자동으로 CI/CD 진행하기 때문 [skip ci]로 git action skip git push https://x-access-token:${GH_TOKEN}@github.com/${{ github.repository }}.git HEAD:main - name: Build Docker Image with Version Tag run: | echo "Building Docker Image with tag: ${{ secrets.DOCKERHUB_USERNAME }}/github_jj:${{ env.SHA_SHORT }}" docker build --pull --no-cache -t ${{ secrets.DOCKERHUB_USERNAME }}/github_jj:${{ env.SHA_SHORT }} . - name: Push Docker Image to Docker Hub run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/github_jj:${{ env.SHA_SHORT }} |
동시성을 보장하기 위해서, 새로운 push가 발생하면
기존 workflow는 취소되도록 추가했고,
git push 전에 소스를 최신 소스와 맞춰주는 작업도 추가해뒀다.
이러고 나서 동시에 2번의 push를 진행하면,
다음과 같이 test1이 종료되고
test2가 진행되는 모습을 확인할 수 있다.
캡쳐는 못했는데, 실제로 보면 앞선 action을 기다리고 있다는 메시지가 뜨기도 한다.
728x90
반응형