CICD

Gitlab Runner 컨테이너 이미지를 AWS ECR에서 가져오기

백셀건전지 2021. 8. 31. 10:57

0. 개요

Gitlab Runner는 Job을 수행 시 Docker Conatiner를 띄워서 작업한다.

러너의 Job 실행 소스는 .gitlab-ci.yml에 정의가 되는데, 이 파일에 image를 설정한다.

Job을 실행할 때 미리 설치해야 하는 패키지들을 before-script 부분에서 정의하지만, 매번 Job을 수행할 때마다 설치하는 것은 효율적이지 않다. 

그래서 미리 패키지들을 설치한 이미지를 ECR에 올린 후 사용하면 보다 효율적인 Pipeline을 구축할 수 있다.

 

1. Gitlab 설정 방법

 1.1 작업 환경

현재 프로젝트에서는 CI 서버인 EC2 인스턴스에 OS는 Ubuntu 18.04 버전이 설치되어 있는 환경이다.

 

1.2 Docker ECR Credential Helper 설치

우선 Runner를 ECR 이미지로 띄우기 위해서는 Docker ECR Credential Helper가 설치되어야 한다.

그리고 Ubuntu에 Docker ECR Credental Helper를 설치하기 위해선 go package가 설치되어야 한다.

아래의 명령어를 입력하여 go 패키지를 설치한 후, Docker ECR Credential Helper를 설치한다.

EC2의 환경이 Ubuntu가 아니라면 위의 Docker ECR Credential Helper 링크에 접속하여 OS에 맞는 명령어를 입력하여 설치할 수 있다.

 

# go 설치
sudo snap install go --classic;
# Docker ECR Credential Helper 설치하기 위해 환경변수 설정
export GOPATH=$HOME/go;
export PATH=$PATH:$GOPATH/bin;
# Docker ECR Credential Helper 설치
go get -u github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login;

1.3 config.json 생성

Docker ECR Credential Helper에서 사용할 config.json파일을 생성한다.

생성 디렉토리는 /home/ubuntu/.docker/config.json이다.

Amazon Linux라면 ubuntu 대신 ec2-user로 바꿔서 입력한다.

아래의 내용으로 파일을 생성한다. 

${aws_account_id} 대신에 AWS 계정 숫자 12자리를, ${region}에 ECR의 리전을 입력한다.

{
  "credHelpers": {
   "${aws_account_id}.dkr.ecr.${region}.amazonaws.com": "ecr-login"
  }
}

1.4 Gitlab Runner 실행

Gitlab runner를 실행한다. 실행 시, Docker ECR Credential Helper과 config.json 파일이 있는 .docker 디렉토리를 Runner 컨테이너의 볼륨에 mount하여 실행한다.

Docker ECR Credential Helper는 OS나 설치 환경에 따라 호스트 서버의 디렉토리가 다르므로 유의한다.

docker run -d --name gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock:rw \
-v /home/ubuntu/.docker/:/root/.docker/ \
-v /home/ubuntu/go/bin/docker-credential-ecr-login:/usr/bin/docker-credential-ecr-login \
gitlab/gitlab-runner:latest

1.5 Gitlab에 Gitlab Runner 등록

Gitlab Runner를 Gitlab에 등록한다.

Gitlab Admin 계정으로 접속하여 Admin Area - Overview - Runner 페이지로 들어와 URL과 Registration Token을 확인한다.

Gitlab Runner 컨테이너에 접속한 후, 아래의 명령어로 Runner를 등록한다.

# Gitlab Runner 컨테이너로 접속한다.
docker exec -it gitlab-runner /bin/bash
# Gitlab Runner를 Gitlab에 등록한다.
gitlab-ci-multi-runner register -n --url https://{URL}/ \
--registration-token {TOKEN} \
--executor docker \
--description "gitlab-runner01" \
--docker-image "docker:latest" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock \
--docker-volumes /cache \
--docker-volumes /usr/bin/docker-credential-ecr-login:/usr/bin/docker-credential-ecr-login \
--docker-volumes /home/ec2-user/.docker/:/root/.docker/

'CICD' 카테고리의 다른 글

두개의 Git Repository를 하나의 CI/CD Pipeline으로 관리하기  (0) 2021.08.31