DevOps

Jenkins와 AWS ECR을 사용한 Docker 배포 [2] - Jenkins 서버에서 AWS ECR 로그인 하기

nineDeveloper 2021. 7. 11. 22:42
728x90

Jenkins와 AWS ECR을 사용한 Docker 배포 [1] - AWS ECR Private Repository 생성 및 설정
Jenkins와 AWS ECR을 사용한 Docker 배포 [2] - Jenkins 서버에서 AWS ECR 로그인 하기
Jenkins와 AWS ECR을 사용한 Docker 배포 [3] - Jenkins 설정
Jenkins와 AWS ECR을 사용한 Docker 배포 [4] - 배포스크립트 작성

Jenkins 서버에서 AWS ECR 로그인 하기

1. AWS CLI2 설치

Jenkins 에서 AWS ECR을 사용하기 위해서는 Jenkins 서버에 AWS CLI2를 설치하고 AWS ECR에 로그인을 해야 한다

아래의 명령어로 AWS CLI2를 설치하자

apt-get install unzip -y && \
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
unzip awscliv2.zip && \
./aws/install

2. AWS Configure 셋팅

docker login을 하기 위해 AWS 설정 정보를 입력해야 한다

aws configure set aws_access_key_id AWS_ACCESS_KEY && \
aws configure set aws_secret_access_key AWS_SECRET_KEY && \
aws configure set region ap-northeast-2 && \
aws configure set output json && \

3. docker login

푸시 명령 보기에서 확인한 로그인 명령어로 docker login을 수행하면 된다

aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 6XXXXXXXXXX0.dkr.ecr.ap-northeast-2.amazonaws.com

4. Token 갱신을 위한 스크립트 작성

AWS ECR 로그인 Token은 12시간 유지 후 폐기된다 다시 인증을 받기 위해서 다시 로그인을 해야 하는 것이 번거로우므로 Jenkins에 CronJob
으로 1시간 마다 로그인이 수행되도록 한다

aws-login.sh 내용

echo "[$(date '+%Y-%m-%d %H:%M:%S')] AWS Private 로그인 처리 매시 0분에 실행" | tee /home/ubuntu/jenkins/cron.log
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 6XXXXXXXXXX0.dkr.ecr.ap-northeast-2.amazonaws.com 2>&1 | tee -a /home/ubuntu/jenkins/cron.log

Jenkins를 Docker로 띄웠다면 아래와 같은 스크립트를 작성하면 된다

echo "[$(date '+%Y-%m-%d %H:%M:%S')] AWS Private 로그인 처리 매시 0분에 실행" | tee /home/ubuntu/jenkins/cron.log
docker exec -u 0 jenkins bash -c "aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 6XXXXXXXXXX0.dkr.ecr.ap-northeast-2.amazonaws.com 2>&1 | tee -a /home/ubuntu/jenkins/cron.log;"

5. Token 갱신을 위한 스크립트 CronJob 등록

crontab -e로 crontab 편집기를 열고 아래의 CronJob을 등록 한다

0 * * * * sh /home/ubuntu/jenkins/aws-login.sh 2>&1 | tee /home/ubuntu/jenkins/cron.log
728x90