##初探在容器上构建持续部署( 三 )
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
- 创建镜像:
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']]) {
推荐阅读
- 「预计 3 分钟读完」助力构建基于AI的服务生态体系,第四范式完成2.3亿美元C+轮融资
- 携手九州▲纷享销客携手九州大地集团构建企业数字化营销体系
- 人员防控:合肥:构建五道硬核“监督网” 筑牢境外输入“防疫墙”
- PingWest品玩:Gartner报告:阿里云容器产品布局全球第一
- 【腾讯科技】微软谷歌亚马逊云竞争开启新战线 无需编写代码短时间内构建应用
- Gartner报告:阿里云容器产品布局全球第一
- 【央广网】福田欧辉与机场巴士、亿华通、中石化联合构建氢能客运生态闭环
- 『腾讯科技』265亿美元!美国第三、第四大运营商正式合并 努力构建最好的5G网络
- 『中国经济网』构建中国云生态|华云数据携手云新信息推出数据中心设备管理平台DCM联合解决方案
- 「滕州房产超市网」滕州亿和广场2020年3月工程播报,一砖一瓦构建幸福