Jenkins¶
Jenkinsfile 通用语法可直接查官方文档,这里只保留会用的部分与内网实践。
🧭 三种构建方式¶
| 方式 | 触发方式 | 用途 |
|---|---|---|
| 触发式构建 | 开发 push / 合并后自动部署 | 开发环境 |
| 参数化构建 | 登录 Web 传参(tag、分支)后部署 | 测试 / 预上线环境 |
| 定时构建 | 参数化构建基础上加定时 | App 自动打包 |
🐳 安装(Docker)¶
jenkins/jenkins:lts-jdk11 · jenkins_home · -p 8080:8080。容器化安装与目录说明。
docker run -d -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 50000:50000 \
--restart=on-failure jenkins/jenkins:lts-jdk11
exec映射 Jenkins war 所在目录,便于升级修复;jenkins_home是系统配置(插件、流水线、workspace)。- 若用
-v $PWD/exec:/usr/share/jenkins/,须保证该目录下已有jenkins.war及ref目录。
⚠️ 使用注意¶
- Master 节点尽量不跑任务。
- JOB 设静默期;建议丢弃旧的构建。
- 轮询 / 定时构建注意设置
TZ=Asia/Chongqing。 - 制品临时可放 Jenkins 自带库,长期保存用 Nexus 等。
- 中文乱码:确认 node 支持中文字符集后,在节点属性加环境变量
LANG = zh_CN.UTF-8。 - 添加从节点时启动方式可选
Non verifying Verification Strategy。 - SVN 轮询很占资源:Repository depth 选
empty。
🧩 Jenkinsfile 要点¶
agent · stages · post · options · when · parallel。流水线元素与条件。
| 元素 | 作用域 | 必须 | 说明 |
|---|---|---|---|
| stages / stage / steps | — | stage、steps 必须 | 阶段与步骤 |
| post | Pipeline | 否 | 结束后的后续 / 清理,条件有 always / changed / failure / success / unstable / aborted |
| options | Pipeline | 否 | timeout、retry、buildDiscarder、disableConcurrentBuilds、skipDefaultCheckout 等 |
| environment | Pipeline | 否 | 环境变量 |
agent {} 指定运行节点,支持 any、none、node、label、docker、dockerfile。
pipeline {
agent { label 'Bulid_21' } // 指定节点 tag
options { timeout(time: 1, unit: 'SECONDS') }
environment { code = 'ccid' }
stages {
stage("CheckOut") {
agent { label 'my-label1 || my-label2' }
environment { ACCESS_KEY = credentials('my-ssh') }
steps { script { println("获取代码") } }
}
stage("Build") {
steps {
echo 'Hello, mibo'
sh('cd /home/mibo/' + env.fliepath + ';svn log -l 5;')
sh 'make -j 40'
}
}
}
post {
success { archiveArtifacts artifacts: 'all_result.txt', followSymlinks: false }
failure { script { println("流水线失败后,要做的事情") } }
}
}
条件判断(when):
when { branch 'master' }
when { environment name: 'DEPLOY_TO', value: 'production' }
when { expression { return params.DEBUG_BUILD } }
when { not { branch 'master' } }
when { allOf { branch 'master'; environment name: 'DEPLOY_TO', value: 'production' } }
when { anyOf { branch 'master'; branch 'staging' } }
并行执行(嵌套阶段内不能再 parallel):
stage('Parallel Stage') {
when { branch 'master' }
failFast true // 一个失败则终止全部
parallel {
stage('Branch A') { agent { label "for-branch-a" } steps { echo "On Branch A" } }
stage('Branch B') { agent { label "for-branch-b" } steps { echo "On Branch B" } }
}
}
script 包裹即可用脚本语法:
🐍 通过 Python 管控 Job¶
from api4jenkins import Jenkins, Folder, job
for job in jenkins_obj.iter_jobs():
job._class # job 类型:Folder WorkflowJob FreeStyleProject 等
job.configure() # xml 格式的 job
job.delete() # 删除全部 job
jenkins_obj.create_job(job_name, job_config.encode('utf-8'))
jenkins_obj.get_job(job_name).disable()
清空某 Job 的 history(在 Jenkins 自带脚本管理器中执行):
item = Jenkins.instance.getItemByFullName("ABJ/CNEOS_4.4.15/SW64_CNEOS_4.4.15_server.v1.0")
item.builds.each() { build -> build.delete() }
item.updateNextBuildNumber(1)
Groovy 官方地址:https://groovy.apache.org/