코드스테이츠 DevOps #Final-Project Day10
To-Do
CI/CD
Docker image tag
기존의 ECR에 업로드 되는 이미지들은 Github Actions를 통해 ${{ github.sha }} 환경변수를 이용하여 커밋의 id를 이미지 태그로 사용하였다.
하지만 커밋 id의 길이가 너무 길다는 점과, 정작 Github에서 보이는 커밋 id는 짧게 되어있기 때문에, 굳이 그대로 사용할 필요가 없다고 느꼈다.
- name: Set short git commit SHA
id: vars
run: |
calculatedSha=$(git rev-parse --short ${{ github.sha }})
echo "::set-output name=short_sha::$calculatedSha"
먼저, ECR 로그인을 하는 step위에 git commit id를 불러와 짧게 변환해주는 코드를 삽입해주고,
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: ${{ steps.vars.outputs.short_sha }}
도커 이미지를 빌드하는 과정의 IMAGE_TAG 환경변수를 커밋 id를 변환한 step의 output을 통해 불러오면 된다.
task-definition.json auto update
기존의 ECS task에서 json 파일을 직접 불러와 이미지 태그를 갈아껴주는 과정에서 완전한 자동화가 아니라고 생각이 들었고, 그걸 자동으로 업데이트 해주는 방법을 찾다가 휴먼에러로 이틀을 날렸지만,
어찌됐든! 방법은 있다는 것.
- name: Retrieve most recent ECS task definition JSON file
id: retrieve-task-def
run: |
aws ecs describe-task-definition --task-definition task-family-name --query taskDefinition > task-definition.json
cat task-definition.json
echo "::set-output name=task-def-file::task-definition.json"
workflow 내에서 aws cli 명령어를 실행시켜 가장 최근 태스크 정의 파일의 json 파일을 불러올 수 있다.
이 때, task family name을 적어주어야 하는데, 이는 태스크 정의 json 파일의 family가 적혀있기에 어렵지 않게 찾을 수 있고, 그렇지 않더라도 보통은 컨테이너 이름으로 적혀있는 듯 하다.
Today...
오늘은 오전부터 빠르게 CI/CD Pipeline을 업데이트 하는 것에 집중을 했고, 내가 예상한 작업시간에 알맞게 작업을 끝낼 수 있었다.
총 3개의 클러스터를 돌리고 있기 때문에, CI/CD를 위해 각각의 release 브랜치를 만들었고 총 세개의 CI/CD Pipeline의 구축을 끝냈다.
테스트를 통해 정상적으로 동작됨을 확인했고, 이대로 특별한 무언가가 생기지 않는 이상 CI/CD는 이제 완벽하다고 생각한다.
영영 끝날 것 같지 않던 작업들이 하나하나 완료되고 이제 마무리가 되어가니 실감이 잘 나지 않는다.
그래도 끝날 때까지 끝난게 아니니 조금만 더 화이팅하자.