Gitlab-Runner와 Docker의 연동

2019. 10. 28. 04:33서버 프로그래밍

Gitlab-Runner를 이용하여 Shell로 동작시키는 것은 문제 없이 동작을 했으나, Docker Image를 이용한 빌드, 테스트 및 배포 자동화를 처리하려다가 삽질한 기록이다.

https://namioto.ip.or.kr/2018/07/16/gitlab-ci%EB%A1%9C-%EC%9E%90%EB%8F%99%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0/

 

Gitlab-CI로 자동 배포하기

Gitlab CI/CD로 자동 배포하기 git을 통해 버전관리를 하면서도 배포 과정에선 FTP, SCP 등과 같은 절차로 너무나도 많은 시간을 소요하고 있었다. 몰론 배포 스크립트 등을 활용하는 조직도 있었으나, 팀에서 Gitlab을 적극적으로 활용하는 만큼 Gitlab-CI 기능을 이용하여 branch commit시에 자동 배포를 하려고 마음을 먹었다. Jenkins등을 활용 할 수도 있지만, 사람은 새로운 도구보다 익숙한 도구를 좋아하는데다 같은 팀원

namioto.ip.or.kr

https://docs.gitlab.com/runner/executors/docker.html

 

The Docker executor | GitLab

The Docker executor GitLab Runner can use Docker to run jobs on user provided images. This is possible with the use of Docker executor. The Docker executor when used with GitLab CI, connects to Docker Engine and runs each build in a separate and isolated c

docs.gitlab.com

https://docs.gitlab.com/runner/install/docker.html

 

Run GitLab Runner in a container | GitLab

Run GitLab Runner in a container This is how you can run GitLab Runner inside a Docker container. General GitLab Runner Docker image usage GitLab Runner Docker images (based on Ubuntu or Alpine Linux) are designed as wrappers around the standard gitlab-run

docs.gitlab.com

 

1. 일단 executor를 Shell로 해서 커밋 시 자동으로 파이프라인이 정상으로 동작하는지 확인한다.

2. 한번 git clone을 해서 파이프라인이 실행되면, 다음 파이프라인 실행시 이미 폴더가 있다고 오류가 난다.

먼저 이 문제를 해결해야 하므로, /etc/gitlab-runner/config.toml 을 다음과 같이 변경한다. 반드시 루트에 2개의 폴더를 만든 다음 chmod -R 777 /builds와 chmod -R 777 /cache로 권한을 변경해준다.

그 다음에는 variables에 다음 2줄을 추가해주고 다시 파이프라인을 실행하면 문제가 사라지는 것을 확인할 수 있다.

https://docs.gitlab.com/ee/ci/large_repositories/

 

Optimizing GitLab for large repositories | GitLab

Optimizing GitLab for large repositories Large repositories consisting of more than 50k files in a worktree often require special consideration because of the time required to clone and check out. GitLab and GitLab Runner handle this scenario well but requ

docs.gitlab.com

3. config.toml 파일을 다음과 같이 수정하면, 드디어 지정한 이미지를 다운로드 받아서 처리하게 된다.

여기서 중요한 것은, 예전 레퍼런스들은 volumes나 privileged 옵션이 runners 바로 밑에 있는데 반드시 runners.docker 항목 밑에 있어야 한다. 이것 때문에 낭비한 시간이 얼마인지... ㅠㅠ

4. 마지막으로 config.toml 파일에 privileged = true를 추가해준다.

https://docs.gitlab.com/runner/executors/docker.html#the-privileged-mode

 

The Docker executor | GitLab

The Docker executor GitLab Runner can use Docker to run jobs on user provided images. This is possible with the use of Docker executor. The Docker executor when used with GitLab CI, connects to Docker Engine and runs each build in a separate and isolated c

docs.gitlab.com

 

* 이 외에도 docker에 대한 접근 권한 문제가 있을 때에는 다음과 같이 해결하면 된다.

$ sudo usermod -a -G docker $USER

$ sudo service docker restart

https://stackoverflow.com/questions/48568172/docker-sock-permission-denied

 

docker.sock permission denied

When I try to run simple docker commands like: $ docker ps -a I get an error message: Got permission denied ... /var/run/docker.sock: connect: permission denied When I check permissions with ...

stackoverflow.com

https://techoverflow.net/2017/03/01/solving-docker-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket/

 

Solving Docker permission denied while trying to connect to the Docker daemon socket – TechOverflow

Problem: You are trying to run a docker container or do the docker tutorial, but you only get an error message like this: docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2

techoverflow.net

https://m.blog.naver.com/PostView.nhn?blogId=tius1234&logNo=221276187240&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

gitlab / gitlab-runner 설치 연동. (docker)

[gitlab 사용 포트 정보] 포트 정보의 경우, /etc/gitlab/gitlab.rb 파일을 수정하여 변경 가능하다. 단, g...

blog.naver.com

https://docs.docker.com/install/linux/docker-ce/centos/

 

Get Docker Engine - Community for CentOS

To get started with Docker Engine - Community on CentOS, make sure you meet the prerequisites, then install Docker. Prerequisites Docker EE customers To install Docker Enterprise Edition (Docker EE),...

docs.docker.com

https://www.sangkon.com/hands-on-docker-part1/

 

Docker - 이미지와 컨테이너, 10분 정리

> 이번 기사에선 도커 이미지와 도커 컨테이너에 대해서 간략하세 소개하고 짧은 실습을 통해서 이미지와 컨테이너를 다루는 기초적인 방법을 소개한다. 개인적으로 도커의 핵심은 '컨테이너'라 생각한다. 도커와 관련된 대부분의 중요한 기술은 컨테이너를 활용하는 쪽으로 초첨을 맞추고 있다고 판단하기 때문이다. 대부분의 교재나 기사에서 도커 이미지와 관련된 내용부터 설명하는 것은 컨테이너에 필요한 파일이나 설정값을 도커 이미지에 저장하기 때문이다. 도커 이미지를 만

www.sangkon.com