Jenkins 설치 On K8s
Prerequisites
- Docker pipeline plugin
- Google container registry for authenticate
- Kubernetes config
Remote Docker Server
docker daemon 에서 0.0.0.0:4243 을 추가해서 원격에서 tcp 로 접속할 수 있도록 한다.
# File : /etc/default/docker
DOCKER_OPTS="--dns 8.8.8.8 -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock"
# File : /lib/systemd/system/docker.service
EnvironmentFile=/etc/default/docker
ExecStart=/usr/bin/docker -H fd:// $DOCKER_OPTS --containerd=/run/containerd/containerd.sock
또는
# File : /etc/docker/deamon.json
..
"hosts": ["tcp://0.0.0.0:4243", "unix:///var/lib/docker.sock", "fd://"],
..
# File : /lib/systemd/system/docker.service
ExecStart=/usr/bin/docker --containerd=/run/containerd/containerd.sock
또는 ssh 로 접속하도록 할 수 있는데, 이 경우 ssh-copyid 로 미리 authorizedeky 로 등록 해 줘야한다. ssh://ubuntu@10.10.10.10
docker.withServer("tcp://10.10.10.10:4243")
Jenkins Inegrate with Git Server
Build Image
Jenkinsfile 에서 컨테이너 이미지를 빌드하기 위해서 docker.build 를 사용한다. docker 는 docker workflow
stage('Build credit-demo image') {
when { branch 'master' }
steps {
script {
dockerImage = docker.build('gcr.io/pa-jhwang/credit-demo')
}
}
}
Push Image to Container Registry
DockerHub
jenkins » credentials 에서 username / password 로 docker hub 인증정보를 생성하고, credentialsId 를 확인한다.
docker.withRegistry("https://registry.hub.docker.com", "<credentialsId>") {
app.push("<tags>")
app.push("lastest")
}
Google Container Registry (GCR)
gcr에 컨테이너 이미지를 Push 하기 위해서는 google cloud 의 credential (json or pk12) 가 필요하다. <- GCP > API Manager > Credentials 에서 key 를 생성하고 json 을 다운로드 받는다. service account 는 storage admin role 을 가지고 있어야 한다.
jenkins » credentials 에서 google container registry for authenticate 를 위한 plugin 을 다운로드 받아서 설치한다. 위에서 다운로드 받은 gcp-credentials.json 을 jenkins credentials 로 등록하고 credentialsId 를 확인한다.
container image의 tag에 timestamp 를 적용할려면
stage('Push to registry') {
steps {
script {
def build_time = new Date()
def sdf = new SimpleDateFormat("yyyyMMddHHmm")
// docker.withRegistry('https://registry.hub.docker.com', 'docker-hub-jhwangdemo') {
docker.withRegistry('https://gcr.io', 'gcr:pa-jhwang') {
dockerImage.push("${sdf.format(build_time)}-${env.BUILD_NUMBER}")
dockerImage.push("latest")
}
}
}
}