Jenkins高级用法 - Jenkinsfile 介绍及实战经验
系列目录
1.Jenkins 安装
2.Jenkins 集群
3.Jenkins 持续集成 - ASP.NET Core 持续集成(Docker&自由风格&Jenkinsfile)
4.Jenkins 高级用法 - Pipeline 安装
5.Jenkins 高级用法 - Jenkinsfile 介绍及实战经验
6.Jenkins 高级用法 - Blue Ocean 使用
7.Jenkins 高级用法 - 根据 git commit 控制构建过程
8.Jenkins 高级用法 - 微服务DevOps实战(ASP.NET Core)
常见问题:
1.Jenkins 时区设置
2.Jenkins 无法捕获构建脚本错误问题
一.什么是 Jenkinsfile
Jenkinsfile 是 Jenkins 2.x 核心特性 Pipeline 的脚本,由Groovy语言实现。Jenkinsfile一般是放在项目根目录,随项目一起受源代码管理软件控制,无需像创建“自由风格"(Jenkins FreeStyle)项目一样,每次可能需要拷贝很多设置到新项目,提供了一些直接的好处:
- Pipeline上的代码审查/迭代
- Pipeline的审计跟踪
- Pipeline的唯一真实来源,可以由项目的多个成员查看和编辑。
Pipeline支持:Declarative(在Pipeline 2.5中引入)和Scripted Pipeline两种格式。两者都支持建立Pipeline,两者都可以用于在Web UI中定义一个流水线Jenkinsfile,将Jenkinsfile文件创建并检查到源代码控制库中通常被认为是最佳做法。
更多详细信息参考:玩转Jenkins Pipeline(大宝鱼) 推荐必读
二. Jenkinsfile 实战经验
看本小节之前,如果你不熟悉 Jenkinsfile 那么推荐一定要阅读,第一小节推荐的文章,里面介绍了很多基本用法。
这里的实战主要讲声明式 Jenkinsfile,因为声明式 Jenkinsfile是 Pipeline 2.5 引入的,比之以前的脚本式会有一些更先进的设计和更快捷的用法,且声明式Jenkinsfile还兼容脚本式语法。这里主要讲一些博主实际用的过程中的经验。
1.在指定的Jenkins集群结点上运行
pipeline { agent { node { label 'slave-1' } } }
label 指你的集群结点名称
2.定义环境变量
pipeline { environment { NUGET_KEY = 'abc' } }
使用:
env.NUGET_KEY
在
sh里使用
$NUGET_KEY
例子:
输出该环境变量
echo "${env.NUGET_KEY}"
sh:
sh 'echo $NUGET_KEY'
这里要注意在 sh 语句块里使用的不同。
3.设置 github webhook 触发器
triggers { githubPush() }
UI上没有没有设置github webhook触发的。脚本设置后,需要到 【系统管理】->【系统设置】里,手动注册一下github webhook即可
4.常用的预置环境变量
变量名 | 说明 |
---|---|
BRANCH_NAME | 当前分支名称 |
GIT_COMMIT | 当前 commit hash |
GIT_PREVIOUS_SUCCESSFUL_COMMIT | 上一次构建成功 cimmit hash |
示例:
echo "branch: ${env.BRANCH_NAME}" echo "current SHA: ${env.GIT_COMMIT}" echo "previous SHA: ${env.GIT_PREVIOUS_SUCCESSFUL_COMMIT}"script
5.script块
script 块里可以写脚本式Jenkinsfile的语法
例子:
stages { stage('Build') { steps { script { result = sh (script: "git log -1|grep 'Release'", returnStatus: true) echo "result: ${result}" } } } }
6.设置构建结果
post { always { script { currentBuild.result = 'NOT_BUILT' } } }
一般放在 POST 语句块
7.敏感数据设置
一些敏感数据,比如账号密码,不可能卸载脚本中。
首先新建凭据(Jenkins 地址 /credentials/store/system/domain/_/):
类型选择 Secret text,Secret 输出你的 账号/密码等。然后记住你设置的ID,待会要用
可以通过
credentials函数来获取
credentials('<凭据id>')
例如
credentials('test')
直接输出到控制台也会加密:
8.定义变量
def cusversion="Jenkinsfile"
必须放在 pipeline 前面或者 script 语句块里面
9.指定分支运行stage
stage('Deploy') { when { branch "<分支名称>" } }
三.扩展阅读
Jenkinsfile 语法 https://jenkins.io/doc/book/pipeline/syntax
玩转Jenkins Pipeline https://blog.csdn.net/diantun00/article/details/81075007
- Windows API介绍及用法:CreateFileMapping和MapViewOfFile函数(进程间数据共享)
- 手机开发实战180——Scatter file介绍1
- 看AI产品经理如何介绍“计算机视觉”(基于实战经验和案例)
- html 中 #include file 的用法示例介绍
- 介绍Python的Urllib库的一些高级用法
- 看AI产品经理如何介绍“计算机视觉”(基于实战经验和案例)
- Nmap在实战中的高级用法
- 敏捷开发的实战经验介绍
- 手机开发实战182——Scatter file介绍3
- confluence创建文件报错 can not create to file /tmp/xxx Errcode:28,引出的 df命令高级用法
- 看AI产品经理如何介绍“计算机视觉”(基于实战经验和案例)
- JavaSE--IO流(FileWriter,FileReader,BufferedWriter,BufferedReader)的用法介绍
- 手机开发实战183——Scatter file介绍4
- vim高级用法多年经验原创总结(全部测试成功)
- ionic的file插件用法官方介绍
- 看AI产品经理如何介绍“计算机视觉”(基于实战经验和案例)
- 手机开发实战184——Scatter file介绍5
- File类的用法总结,及文件过滤器的介绍。
- 看AI产品经理如何介绍“计算机视觉”(基于实战经验和案例)
- 基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解