由于csdn贴图过于繁琐,带有图片的原版博客见博主网站:https://blog.zhenglin.work/jenkins/variety_pipeline_build.html
pipeline顾名思义,流水线;这种风格job具有良好的阅读性;这里重点要说的是传统pipeline和多分支pipeline两种构建方式;
[外链图片转存失败(img-VR7P0Xep-1563346681767)(images/1562939006935.png)]
如上图所示两种pipeline
新建页面,给job命名后直接选择pipeline风格
然后在job里面会有个pipeline脚本输入框;我们需要提前把构建过程、构建步骤罗列出来;
如:1,选择构建节点机=>拉取代码=>编译=>打包=>存档
2,拉取代码=>编译 =>部署 =>发送邮件
这些构建步骤、流程要根据实际生产情况来决定。每一步的构建目的可以作为stage的名称。
[外链图片转存失败(img-WZ8LIo4W-1563346681768)(images/1562939414776.png)]
在输入框下面有个"Pipeline Syntax"语法翻译器,这个特别有用。比如说从某个项目拉取代码的脚本不会写,可以参照下图,把要操作的步骤配置后,点击"Generate Pipeline Script"
[外链图片转存失败(img-IKUZqJZq-1563346681769)(images/1562939510073.png)]
就自动生成了script,把这个脚本粘贴到pipeline 输入框即可。
申明式指令生成器
[外链图片转存失败(img-znJf8vH2-1563346681769)(images/1563004273641.png)]
这里面生成语法都是基于申明式语法的。
全局变量
[外链图片转存失败(img-VP8NKjdB-1563346681770)(images/1563004415792.png)]
这里面提供pipeline 可能会用到的变量。
下面是jenkins官方提供pipeline例子,我们可以借鉴着编写。
https://jenkins.io/doc/pipeline/examples/
这里提供一个简单的script示例。
node {
stage('拉取代码') {
git credentialsId: '0e9c3bxxxxxx', url: ' [email protected]:platform/xxr.git'
}
stage('编译') {
dir('./') {
sh '/data/local/maven-3.5.4/bin/mvn clean install -DskipTests=true'
}
}
stage('镜像构建') {
dir('./') {
docker.build("[email protected]:platform /test_pipeline:prod-${BUILD_ID}").push()
}
}
stage('镜像构建') {
dir('./') {
rancher confirm: false, credentialId: 'xxxxxxxxxxxxxxxxxxxxx', endpoint: 'http://docker仓库地址:8080/v2', environmentId: '1a5', environments: '', image: 'docker仓库ip/ test_pipeline:prod-${BUILD_ID}', ports: '', service: 'project /test_pipeline_1', timeout: 50
}
}
}
构建成功后,每一步都有详细构建用时
[外链图片转存失败(img-dHNgQu2V-1563346681770)(images/1562985406960.png)]
Pipeline使用语法详解:
https://jenkins.io/doc/book/pipeline/syntax/(官方文档,英文)
https://blog.csdn.net/diantun00/article/details/81075007(中文翻译版)
[外链图片转存失败(img-FZykapZr-1563346681771)(images/1562984937588.png)]
[外链图片转存失败(img-5qj6rjp4-1563346681771)(images/1562985012403.png)]
需要注意的是,如果git仓库是在本地,没有全局域名最好填写ip;jenkins主机的公钥填进去。
1,要确保自己有新创建分支的权限 2,如果没有创建分支的权限,可以让管理员给自己创建一个自己提交合并代码的分支;
[外链图片转存失败(img-hFfFi9eA-1563346681772)(images/1562999997140.png)]
然后选择此分支进行编辑,如果使用节点机构建的话,在agent中选择node(节点机),若本机选择master即可,若不依赖环境可以选择any;如果有docker环境也可以选;Lable选择节点机名称(提前在node里面配置好节点,保持jenkins与节点机的连接状态);
[外链图片转存失败(img-KYSlHW1r-1563346681772)(images/1563000853619.png)]
也可以使用ctrl +s组合键进入快捷编辑界面,直接编写脚本
[外链图片转存失败(img-gbS1vBCP-1563346681772)(images/1563000894594.png)]
完成后保存,提交后,代码仓库中会多出一个Jenkinsfile(首字母J是大写的)文件,存放我们刚才编辑生成的脚本;可以在仓库中打开一下Jenkinsfile,查看一下是否正确。需要注意的时,这个编译脚本只针对当前分支,如果以后的分支都想使用;可以把Jenkinsfile都带上,如果编译有差异,可以再通过界面进行修改和微调。
特别注意:不能在当前分支修改后,提交到另一个分支;如在dev分支修改jenkinsfile后,选择提交到master分支,这些会把master分支覆盖掉;可以在本地修改jenkinsfile,再单独把Jenkinsfile,cherry-pick 或checkout 到master中
关于触发器,其他配置的语法,可以自行阅读官网文档,非常详细。
https://jenkins.io/doc/book/pipeline/syntax/
说明文档相关截图和说明
[外链图片转存失败(img-GGTukDEr-1563346681774)(images/1563001578559.png)]
说pipeline采用了申明式语法,语法的要求等。
[外链图片转存失败(img-azIEET0j-1563346681775)(images/1563002399548.png)]
右侧目录树,展示了申明式和脚本式语法几大模块。
使用blue ocean 模式编译pipeline好处在于能可视化进行操作,自动生成pipeline 代码,如果可视化里面提供的功能不够,可以ctrl+s,切换到源码界面,然后对照pipeline语法,进行完善。
如果有新增分支了,job页面没有发现,可以在配置页面中点击" Scan Multibranch Pipeline Now" 发现新增的分支。但它有个缺点,把所有有更新的分支 都执行一遍。
[外链图片转存失败(img-UstMU9QD-1563346681777)(images/1563021192788.png)]
pipeline {
agent {
node {
label 'master'
}
}
stages {
stage('Build') {
steps {
echo 'Build'
sh 'sudo chmod 755 deploy/scripts/jenkins/build.sh &&./deploy/scripts/jenkins/build.sh'
}
}
stage('Deploy') {
steps {
echo 'Deploy'
sh 'rm -rf app_receiver*.tar.gz'
sh 'tar -czvf app_receiver_${BRANCH_NAME}.tar.gz * --exclude=.git* '
}
}
stage('archive_file') {
steps {
echo 'tar app_receiver'
archiveArtifacts(artifacts: 'app_receiver*.tar.gz', onlyIfSuccessful: true)
}
}
}
tools {
nodejs 'nodejsv9'
}
triggers {
pollSCM('H */4 * * 1-5')
}
}
[外链图片转存失败(img-gUfE6l9F-1563346681778)(images/1563005022124.png)]
官方操作手册地址:https://jenkins.io/doc/book/ 这个第一手权威资料;但是英文的,没办法;一手资料一般都是英文的;如果英文不好,可以Chrome自动翻译,若嫌翻译效果差;或找到中文社区的翻译版,毕竟国内大神不是一般的多。
jenkins工作原理:通过向节点机(或本机)注入agent后,然后通过ssh调用节点机,利用安装的插件执行各种操作及命令,如编译,打包存档等。 再加上各种执行限定条件,如构建时间,构建条件;脚本命令等。
可以说插件是jenkins的灵魂了,如果只安装jenkins没有插件,可能什么也干不了;怎么从上千种插件中快速找到真正所需的插件,这就是积累的过程。这里总结两点,1,所有插件(不管是安装的还是未安装的)点击后,都可以跳转到说明和示例页面;2,要掌握搜索技巧,比如搜索一个copy 存档用的插件,就搜copy;在结果页面,快速浏览一遍后,就基本能锁定大概范围,这个时候逐个点击查看示例页面。
常用编译插件:安卓编译工具gradle,xcode可以从Mac机上调用;