Page History
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
설정
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는 소켓 소유권을 그룹에 적용한다.
Docker REST API에 원격으로 액세스 하는 경우
Code Block | ||
---|---|---|
| ||
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 로 명령어 실행을 할 수 있다.
차이점은 Docker server REST API 호스트를 공유하지않고 사용하는 경우에는 Execute Shell 로 다음과 같이 스크립트를 통한 Docker images를 생성하였다.
아래와 같이 스크립트 작성으로 실행해도 무관하나 사설 레지스트리를 이용하는 경우 레지스트리의 ID/PW가 자칫 공개될수 있는 보안적 이슈가 발생한다.
Code Block | ||
---|---|---|
| ||
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가 공개되지 않고 보안적인 이슈까지 해결된다.
Jenkins 빌드를 진행하게 되면,
아래와 같이 빌드가 완료되고 Docker images 빌드 후 사설 레지스트리에 Push 된다.
Jenkins 관리 → 시스템설정 →