GitHub Actions에서 SHA를 사용하여 Docker 이미지 태그를 설정하는 과정은 CI/CD 파이프라인에서 특정 커밋에 대한 이미지 버전을 추적할 수 있도록 해줍니다. 이 방법을 사용하면 어떤 코드 상태에서 빌드된 이미지인지를 쉽게 파악할 수 있습니다.
1. SHA 가져오기
GitHub Actions에서 현재 커밋의 SHA-1 해시 값을 가져오는 코드
- name: Set GIT SHA Short
id: sha
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- git rev-parse --short HEAD: 현재 커밋의 SHA-1 해시 값을 7자리로 축약하여 가져옵니다.
- sha_short=$(git rev-parse --short HEAD): 이 값을 sha_short 변수에 저장합니다.
- $GITHUB_OUTPUT: GitHub Actions에서 이후의 단계에서 이 값을 사용할 수 있도록 설정합니다.
2. SHA를 Docker 이미지 태그로 사용
현재 커밋 SHA 값을 사용하여 Docker 이미지 태그를 설정하는 코드
IMAGE_TAG: ${{ steps.sha.outputs.sha_short }}-testing
- IMAGE_TAG: Docker 이미지의 태그를 현재 커밋 SHA 값으로 설정합니다. sha_short 값을 사용하여 태그가 abc1234-testing 형식으로 만들어집니다.
3. Docker 이미지 빌드 및 푸시
이후, Docker 이미지를 빌드하고 ECR에 푸시
docker build -f Dockerfile-testing -t my-ecr-repo/my-image:$IMAGE_TAG .
docker push my-ecr-repo/my-image:$IMAGE_TAG
- my-ecr-repo/my-image:abc1234-testing: Docker 이미지의 이름과 태그가 커밋 SHA 기반으로 설정됩니다.
도커 이미지 이름과 태그
- 이미지 이름: 도커 이미지 이름은 고유한 식별자로, dockerhub나 ECR에 저장된 이미지를 식별합니다.
- 예시: my-image
- 이미지 태그: 해당 이미지의 버전이나 상태를 구분하는 식별자로 사용됩니다. 보통 버전 번호(예: 1.0, latest, v2)나 커밋 SHA(예: abc1234)를 사용합니다.
- 예시: my-image:latest, my-image:v1.0, my-image:abc1234-testing
왜 태그가 중요한가?
- 버전 관리: 동일한 이미지 이름을 사용하면서 다양한 버전이나 상태를 관리할 수 있습니다. 예를 들어, my-image:v1과 my-image:v2는 같은 이미지 이름이지만 다른 버전을 나타냅니다.
- CI/CD에서 버전 추적: CI/CD 파이프라인에서 커밋 SHA를 태그로 사용하면 특정 커밋에서 빌드된 이미지를 추적할 수 있습니다.
- 롤백과 배포 관리: 문제가 발생하면 이전에 잘 동작했던 이미지를 태그를 통해 롤백하거나 배포 상태를 확인할 수 있습니다.