pipeline 语法参考 https://jenkins.io/doc/book/pipeline/syntax/
1. jenkinsfile 骨架
1 | pipeline { |
2. agent
agent,定义构建的节点,也可以在 stage 中指定。默认 none,如果我们在 jenkins 上配置了一个 mac 节点,app 在 mac 节点上构建,那么我们可以如下声明:
1 | agent { |
3. environment
可以在 environment 中注入构建时的环境变量。如我们构建时使用指定路径的 nodejs:
1 | environment { |
除了可以在 environment 中声明环境变量外,还可以在 groovy 脚本中添加或修改。
1 | script { |
4. parameters
有时候我们需要参数化构建,如选择构建的环境,也可以通过 jenkinsfile 定义。下面示例提供了两个选择框,可以选择部署的环境和部署类型。需要注意的是,选择框的第一个为默认值。
1 | parameters { |
更多输入类型参考 https://jenkins.io/doc/book/pipeline/syntax/#parameters
1 | parameters { |
5. triggers
当然,也可以在 jenkinsfile 上定义任务的触发器,内部提供了 cron, pollSCM 和 upstream 三种类型的触发器。
1 | triggers { |
除了内置触发器外,许多插件也提供了触发器,比如 Generic Webhook Trigger
1 | triggers { |
6. stages
stages 中的 stage 会显示在 jenkins 任务主页中的 Stage View 中。每个 stage 可以有很多个 steps,我们可以执行构建命令。
1 | stage('打印环境变量') { |
如果你不知道支持哪些流水线脚本,可以在任务主页中点击【Pipeline Syntax】进入页面,选择示例步骤,生成流水线脚本。
当然,可以在 steps 中使用 script 支持 groovy 脚本。比如以下脚本,在不同构建环境下设置不同的环境变量。
1 | stage('设置network') { |
7. post
构建完成功或失败后,会触发后置处理
1 | post { |
8. 字符串
groovy 有多种字符串定义的方式,只有双引号字符串可以插入参数。
1 | 'hello, world' |
9. 钉钉群通知
声明钉钉机器人 url
1
2
3environment {
DINGDING_ROBOT_URL = 'https://oapi.dingtalk.com/robot/send?access_token=123456'
}将通知信息拼接成钉钉支持的格式,使用 curl 发送,参考 https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
1 | post { |
最好能够将上面的 json 拼接抽象成函数。
1 | pipeline { |
10. 常见问题
构建异常 failed to unshare namespaces: Cannot allocate memory
1
2
3[91mnsenter: failed to unshare namespaces: Cannot allocate memory
[0m[91mcontainer_linux.go:262: starting container process caused "process_linux.go:247: running exec setns process for init caused \"exit status 34\""
[0moci runtime error: container_linux.go:262: starting container process caused "process_linux.go:247: running exec setns process for init caused \"exit status 34\""解决方案:连接 jenkins 服务器,执行 echo 1 > /proc/sys/vm/drop_caches 释放内存
待更新。。
学习链接: