书接上回:https://www.cnblogs.com/huningfei/p/17140068.html,
上篇介绍了如何使用自由风格发布k8s项目,这次介绍如何使用pipeline发布k8s项目。
一 背景说明
如果要使用pipeline,前提是代码仓库里面有一个Dockfile的文件,和deploy.yml部署文件
项目地址为:https://gitee.com/huningfei/demo-test
二 获取pipeline里面的语法
2.1 git拉取代码-语法
第一种方法:
第二种方法:
2.2 maven编译-语法
2.3 拷贝yaml部署文件到k8s-master-语法
2.4 上传镜像到docker仓库-语法
以上四步,都会分别生成对应的pipeline命令,粘贴到pipeline脚本里即可
三 设置自动构建
如果没有下面这个选项,就需要安装gitlab插件,
如果在gitlab里添加jekins的地址报错,去掉这个选项
四 pipeline脚本内容
4.1 普通pipeline方式
pipeline{
agent any
environment {
registry="registry.cn-hangzhou.aliyuncs.com/huningfei/welcome"
image_name="$registry:$BUILD_NUMBER"
}
stages {
stage('拉取代码'){
steps {
git credentialsId: '2751f03c-ba70-494a-a13c-cac7f9c3ffcc', url: 'https://gitee.com/huningfei/demo-test.git'
}
}
// 第二步
stage('代码编译'){
steps {
sh '/var/jenkins_home/mvn/bin/mvn clean package -Dmaven.test.skip=true'
}
}
stage('通过dockerfile构建镜像'){
steps {
sh '''cp -r $WORKSPACE/target/*.jar .
docker build -t mytest .'''
}
}
stage('上传dockerhub仓库'){
steps {
withCredentials([usernamePassword(credentialsId: 'a98622af-1b3d-42bd-8f1b-d732ad3a3e6a', passwordVariable: 'password', usernameVariable: 'username')]) {
sh '''
docker tag mytest:latest ${image_name}
docker push ${image_name}'''
}
}
}
stage('通过publish over ssh 拷贝deploy.yml到k8s-master'){
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: '172.31.7.112-k8s-master', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'deploy.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
stage('更改 yam里的image地址 '){
steps {
sh 'ssh [email protected] sed -i "s#address#${image_name}#g" /tmp/deploy.yml'
}
}
stage('部署到 k8s'){
steps {
sh 'ssh [email protected] kubectl apply -f /tmp/deploy.yml'
}
}
}
}
4.2 pipeline SCM方式
前提条件,代码仓库里必须含有Jenkinsfile
jenkins设置如下:
最后保存构建,如下
网页访问测试