Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Jenkins에서 Docker 빌드를 유발할때 몇가지 방법이 존재한다.

다음 기술된 방법은 그중의 한가지 방법이며,  Jenkins Master & Slave 를 구성하지 않고

외부 Jenkins 에서 Docker Build 를 유발하였다.


시작하기전.

Jenkins 내 Kubernetes Continuous Deploy Plugin을 사용하였다.

Jenkins 에서 Kubernetes 클러스터에 리소스 구성을 배포하는 플러그인 이다.

기술된 방법은 다음과 같은 장점을 가지고 있다.

  • SSH를 통해 마스터 노드에서 클러스터 자격 증명을 확인하며 수동으로 구성할수 있음.
  • 동적 리소스 배포를 수행 할 수 있도록 리소스 구성에 대한 변수 대체.
  • 개인 Docker 레지스트리에 대한 Docker 로그인 자격 증명 관리.
  • kubectl Jenkins 슬레이브 노드에 툴 을 설치할 필요가 없음 

시작하기전.

  • Kubernetes 클러스터.
  • Kubernetes 리소스 구성이 배포

설정

  • Docker Jenkins 설치.
  • Docker 설치.
  • Docker Build Plugin 설치.


플러그인 설치

Jenkins 에서 Docker 빌드를 위한 플러그인을 다음과 같이 설치 했다.

https://wiki.jenkins.io/display/JENKINS/Docker+Plugin

https://wiki.jenkins.io/display/JENKINS/Docker+build+step+plugin

Image Added



설정

Jenkins 관리 → 시스템설정 → Docker Builder 

Docker server REST API 를 사용하는 방법은 공식 사이트를 참조 한다.

https://docs.docker.com/develop/sdk/

호스트에 설치된 Docker server REST API URL 를 통하여 공유한다.

Test Connection 를 통하여 Connected to unix:///var/run/docker.sock 메세지 노출을 확인할 수 있다.

Linux 사용자이고 로컬 컴퓨터의 Docker API에 연결해야하는 경우 해당 URL은 unix:///var/run/docker.sock설명서에 언급 된 것과 같다.

기본적으로 Docker 데몬은 수신 대기 unix:///var/run/docker.sock하고 클라이언트는 데몬과 상호 작용하기 위해 루트 액세스 권한을 가져야한다.

docker라는 그룹이 시스템에 존재하면 docker는 소켓 소유권을 그룹에 적용한다.

Image Added

Docker REST API에 원격으로 액세스 하는 경우

Code Block
themeRDark
docker server rest api url jenkins
# /lib/systemd/system/docker.service
# sudo vi /lib/systemd/system/docker.service
ExecStart=/usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:1111
# systemctl daemon-reload
# sudo service docker restart
# curl http://localhost:1111/version
{"Version":"17.05.0-ce","ApiVersion":"1.29","MinAPIVersion":"1.12","GitCommit":"89


호스트의 Docker server REST API URL 설정이 끝나면,

Jenkins JOB 프로젝트 구성의 Steop 에서 다음과 같이 Execute Docker Command 로 명령어 실행을 할 수 있다.

Image Added

차이점은 Docker server REST API 호스트를 공유하지않고 사용하는 경우에는  Execute Shell 로 다음과 같이 스크립트를 통한 Docker images를 생성하였다.

아래와 같이 스크립트 작성으로 실행해도 무관하나 사설 레지스트리를 이용하는 경우 레지스트리의 ID/PW가 자칫 공개될수 있는 보안적 이슈가 발생한다.

Code Block
themeRDark
echo "REGISTRY_HOST ::::: " $REGISTRY_HOST
echo "JOB_NAME ::::: " + $JOB_NAME
echo "BUILD_NUMBER ::::: " + $BUILD_NUMBER
echo "WORKSPACE ::::: " + $WORKSPACE
cd $WORKSPACE
docker login {{docker registry ip}} -u {{user id}} -p {{user pw}}
docker build -f Dockerfile -t $JOB_NAME:$BUILD_NUMBER .
docker tag $JOB_NAME:$BUILD_NUMBER {{docker registry ip}}/$JOB_NAME:$BUILD_NUMBER
docker push {{docker registry ip}}/$JOB_NAME:$BUILD_NUMBER

Execute Docker Command 로 명령 및 실행을 하는 경우

레지스트리의 ID/PW가 공개되지 않고 보안적인 이슈까지 해결된다.

Image Added

Jenkins 빌드를 진행하게 되면,

아래와 같이 빌드가 완료되고 Docker images 빌드 후 사설 레지스트리에 Push 된다.

Image AddedJenkins 관리 → 시스템설정 →