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를 태그로 사용하면 특정 커밋에서 빌드된 이미지를 추적할 수 있습니다.
  • 롤백과 배포 관리: 문제가 발생하면 이전에 잘 동작했던 이미지를 태그를 통해 롤백하거나 배포 상태를 확인할 수 있습니다.

+ Recent posts