##初探在容器上构建持续部署( 三 )


podTemplate(label: POD_LABEL, cloud: 'kubernetes', containers: [
containerTemplate(name: 'modified-jenkins', image: 'jfeng45/modified-jenkins:1.0', ttyEnabled: true, command: 'cat')
],
volumes: [
hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock')
]) {
node(POD_LABEL) {
def kubBackendDirectory = ''/script/kubernetes/backend''
stage('Checkout') {
container('modified-jenkins') {
sh 'echo get source from github'
git 'https://github.com/jfeng45/k8sdemo'
}
}
stage('Build image') {
def imageName = ''jfeng45/jenkins-k8sdemo:${env.BUILD_NUMBER}''
def dockerDirectory = ''${kubBackendDirectory}/docker/Dockerfile-k8sdemo-backend''
container('modified-jenkins') {
withCredentials([[$class: 'UsernamePasswordMultiBinding',
credentialsId: 'dockerhub',
usernameVariable: 'DOCKER_HUB_USER',
passwordVariable: 'DOCKER_HUB_PASSWORD']]) {
sh ''''''
docker login -u ${DOCKER_HUB_USER} -p ${DOCKER_HUB_PASSWORD}
docker build -f ${WORKSPACE}${dockerDirectory} -t ${imageName} .
docker push ${imageName}
''''''
}
}
}
stage('Deploy') {
container('modified-jenkins') {
sh ''kubectl apply -f ${WORKSPACE}${kubBackendDirectory}/backend-deployment.yaml''
sh ''kubectl apply -f ${WORKSPACE}${kubBackendDirectory}/backend-service.yaml''
}
}
}
}
我们逐段看一下代码:
设定容器镜像:
podTemplate(label: POD_LABEL, cloud: 'kubernetes', containers: [
containerTemplate(name: 'modified-jenkins', image: 'jfeng45/modified-jenkins:1.0', ttyEnabled: true, command: 'cat')
],
volumes: [
hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock')
])
这里设定Jenkins子节点Pod的容器镜像 , 用的是“jfeng45/modified-jenkins:1.0” , 也就是我们在上个步骤创建的 。 所有的脚本里的步骤(stage)都用的是这个镜像 。 “volumes:”用来挂载卷到Jenkins容器中 , 这样Jenkins子节点就可以使用虚机的Docker引擎 。
关于Jenkins脚本命令和设置挂载卷请参阅jenkinsci/kubernetes-plugin
https://github.com/jenkinsci/kubernetes-plugin

  • 创建镜像:
下面的代码生成Go程序的Docker镜像文件 , 这里我们没有用Docker插件 , 而是直接调用Docker命令 , 它的好处后面会讲到 。 它引用了我们前面设置的“Docker hub”的凭证去访问Docker库 。 在脚本里 , 我们先登录到“Docker hub” , 然后使用上一步从GitHub下载的源代码来创建镜像 , 最后上传镜像到“Docker hub” 。 其中
WORKSPACE”是Jenkins预定义变量 , 从GitHub下载的源代码就存放在“{WORKSPACE}”里 。
stage('Build image') {
def imageName = ''jfeng45/jenkins-k8sdemo:${env.BUILD_NUMBER}''
def dockerDirectory = ''${kubBackendDirectory}/docker/Dockerfile-k8sdemo-backend''
container('modified-jenkins') {
withCredentials([[$class: 'UsernamePasswordMultiBinding',
credentialsId: 'dockerhub',
usernameVariable: 'DOCKER_HUB_USER',
passwordVariable: 'DOCKER_HUB_PASSWORD']]) {