Github Actions 로 CI/CD 를 구축하고 있었습니다.
스프링 부트 프로젝트를 Docker Image 로 만들어서 ECR 에 푸시하고, EC2 는 ECR 에서 pull을 하는 방식이었습니다.
EC2 에서 aws-ecr-credential-helper 를 설치해, ECR 접근 시 로그인 과정을 자동화했습니다.
| 배포 스크립트
...
- name: SSH로 EC2에 접속하기
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
script_stop: true
script: |
sudo docker stop test19 || true
sudo docker rm test19 || true
sudo docker pull ${{ steps.login-ecr.outputs.registry }}/test19:latest
sudo docker run -d --name test19 -p 8080:8080 ${{ steps.login-ecr.outputs.registry }}/test19:latest
하지만, ECR 에 업로드된 프로젝트 이미지를 pull 받을 때 no basic auth credentials
에러가 발생했습니다.
...
- name: SSH로 EC2에 접속하기
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
script_stop: true
script: |
docker stop test19 || true
docker rm test19 || true
docker pull ${{ steps.login-ecr.outputs.registry }}/test19:latest
docker run -d --name test19 -p 8080:8080 ${{ steps.login-ecr.outputs.registry }}/test19:latest
aws-ecr-credential-helper 깃헙 페이지에 적힌 가이드처럼
/home/ubuntu/.docker/config.json (저는 ubuntu 입니당)
을 생성했지만,
sudo로 실행하면서 관리자 권한인 root 사용자로 전환되었고, root 사용자의 디렉토리엔/.docker/config.json
이 없기 때문에 ECR 인증이 불가했던 것입니다.
따라서, sudo를 제외하고 실행하면 정상적으로 동작하는 것을 확인할 수 있습니다.
그리고, root 사용자의 디렉토리에도 ECR 인증을 위한 파일을 추가하면 실행되는지 확인하기 위해 root 사용자의 디렉토리에 ECR 인증을 위한 작업을 수행하고 Github Actions 를 재실행해보았습니다.
root 사용자 디렉토리/.docker/config.json
을 생성했습니다
Github Actions 재실행 (sudo 명령어 포함)
성공적으로 수행되는 것을 확인할 수 있습니당