Skip to main content

macOS와 Jenkins

맥에서 Jenkins를 다양하게 실행할 수 있다. 설정의 경우 macOS에서 Jenkins 설정을 참고한다.


Homebrew

맥의 정말 강력한 패키지 매니저인 Homebrew를 사용하면, 단 몇 줄의 명령어만으로 Jenkins 서비스를 설치할 수 있다. 아래와 같이 https://www.jenkins.io/download/lts/macos/프로시저를 따르면 된다.

$ brew install jenkins-lts

$ brew services start jenkins-lts

그럼 호스트 시스템의 $HOME/.jenkins 경로에 Jenkins 애플리케이션이 설치된 것을 확인할 수 있다. 따라서 호스트 시스템의 리소스를 사용할 수 있다는 장점이 있다.


DinD(Docker in Docker)

DinD 방식은 Docker가 컨테이너에 설치 돼, 컨테이너 내부에서 Docker executor를 사용할 수 있는 방법이다. https://www.jenkins.io/doc/book/installing/docker/#on-macos-and-linux프로시저를 따라 실행할 수 있다.

docker:dind 이미지를 이용하여 다음과 같이 구성할 수 있다.

$ docker network create jenkins

$ docker run \
--name jenkins-docker \
--rm \
--detach \
--privileged \
--network jenkins \
--network-alias docker \
--env DOCKER_TLS_CERTDIR=/certs \
--volume jenkins-docker-certs:/certs/client \
--volume jenkins-data:/var/jenkins_home \
--publish 2376:2376 \
docker:dind \
--storage-driver overlay2

그런데 위 명령어에서 --privilegedprivileged mode에서 실행이 되기 때문에, 몇 가지 이슈가 발생할 수 있다.

특히 매번 격리된 컨테이너로 실행되기 때문에, Docker의 Layer Caching이 되지 않는다. 그래서 아래와 같이 DooD 방식을 소개하기도 한다.


DooD(Docker outside of Docker)

Docker executor를 컨테이너 내부에서 실행할 수 있는 또 다른 방법이다. Docker 컨테이너 내부에 별도의 Docker 설치 없이 Docker 데몬이 호스트 시스템의 Docker 소켓 을 마운트해서 사용하는 방식이다.

DooD 방식을 통해 Jenkins 컨테이너 내부의 pipeline에서 docker 명령어를 사용할 수 있게 된다.

$ docker pull jenkins/jenkins:lts

$ docker run -d \
--name jenkins-dind \
-p 8080:8080 -p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:lts

하지만 DooD 방식 또한 몇 가지 이슈가 존재한다.

AWS에서는 그러지말고 다른 빌드툴들을 사용해보라고 추천했는데(ex. Kaniko, Buildah, ...), 이를 잘 비교한 블로그 글이 있었다.

Related Links