Jenkins于Linux如何定制构建脚本
导读:在 Linux 上定制 Jenkins 构建脚本的实用指南 一 选择项目类型与存放方式 项目类型 Pipeline:用 Groovy 编写,推荐以 Jenkinsfile 纳入代码仓库,便于版本化与复用(Declarative 或 Sc...
在 Linux 上定制 Jenkins 构建脚本的实用指南
一 选择项目类型与存放方式
- 项目类型
- Pipeline:用 Groovy 编写,推荐以 Jenkinsfile 纳入代码仓库,便于版本化与复用(Declarative 或 Scripted 均可)。
- Freestyle:通过图形界面添加构建步骤,适合简单任务或快速接入。
- 存放方式
- Inline:在 Jenkins 任务配置里直接写脚本(适合临时或简单脚本)。
- SCM:从 Git 等拉取脚本(推荐,便于团队协作与审计)。
- 基本流程
- 新建任务(选择 Pipeline 或 Freestyle)→ 配置源码管理(如 Git)→ 配置构建步骤(Pipeline 的 stages/steps,或 Freestyle 的 Execute shell)→ 保存并运行。以上两种方式在 Linux 上均适用。
二 Pipeline 方式定制脚本
- 基本结构与常用步骤
- 使用 agent any 或按标签调度节点;在 stages 中划分 Build/Test/Deploy;在 steps 中使用 sh 执行 Shell 命令;按需使用 post 做清理与通知。
- 示例 Jenkinsfile(含参数、测试报告归档与通知)
- 将以下文件提交到仓库根目录(如 Jenkinsfile),在任务中选择 Pipeline script from SCM 指向该文件。
- 参数说明:通过 parameters 定义 DEPLOY_ENV(部署环境)、VERSION(构建版本)、ROLLBACK(是否回滚);测试阶段归档 JUnit 报告;构建后发送邮件通知。
- 安全建议:敏感信息使用 Credentials 绑定,避免在脚本中明文出现密码或密钥。
pipeline {
agent any
parameters {
choice(name: 'DEPLOY_ENV', choices: ['dev','test','prod'], description: '部署环境')
string(name: 'VERSION', defaultValue: '', description: '构建版本/标签')
booleanParam(name: 'ROLLBACK', defaultValue: false, description: '是否回滚')
}
environment {
// 推荐用 withCredentials 绑定 SSH 私钥或用户名/密码
// 例如:withCredentials([sshUserPrivateKey(credentialsId: 'deploy-ssh-key', keyFileVariable: 'SSH_KEY')])
}
stages {
stage('Checkout') {
steps {
checkout scmGit(branches: [[name: env.BRANCH_NAME]], extensions: [], userRemoteConfigs: [[url: 'git@github.com:org/repo.git']])
}
}
stage('Build') {
steps {
sh 'mvn -B -DskipTests clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
post {
always {
junit '**/target/surefire-reports/*.xml'
}
}
}
stage('Deploy') {
when {
expression {
!params.ROLLBACK }
}
steps {
script {
if (params.DEPLOY_ENV == 'dev') {
sh 'scp target/app.jar user@dev-server:/opt/app/'
sh 'ssh user@dev-server "systemctl restart app &
&
systemctl is-active --quiet app || exit 1"'
}
else if (params.DEPLOY_ENV == 'test') {
sh 'scp target/app.jar user@test-server:/opt/app/'
sh 'ssh user@test-server "systemctl restart app"'
}
else if (params.DEPLOY_ENV == 'prod') {
// 生产环境可接入审批、灰度、金丝雀等策略
input '确认部署到生产环境?'
sh 'scp target/app.jar user@prod-server:/opt/app/'
sh 'ssh user@prod-server "systemctl restart app"'
}
}
}
}
}
post {
always {
echo "构建完成,环境:${
params.DEPLOY_ENV}
,版本:${
params.VERSION}
"
}
failure {
emailext(
subject: "【构建失败】${
env.JOB_NAME}
#${
env.BUILD_NUMBER}
",
body: "详情:${
env.BUILD_URL}
",
to: 'team@example.com'
)
}
success {
emailext(
subject: "【构建成功】${
env.JOB_NAME}
#${
env.BUILD_NUMBER}
",
body: "版本:${
params.VERSION}
,环境:${
params.DEPLOY_ENV}
",
to: 'team@example.com'
)
}
}
}
三 Freestyle 方式定制脚本
- 新建 Freestyle 任务 → 在 源码管理 选择 Git → 在 构建 添加 Execute shell,直接编写 Shell 脚本;如需参数,勾选 This project is parameterized 添加 Choice/Text/Boolean/Password 等参数,脚本中通过 $参数名 引用。
- 示例 Execute shell(配合参数使用)
- 说明:脚本中使用 $DEPLOY_ENV、$VERSION 等参数;可按需加入 tar 打包、备份、SCP 上传、远程启停服务等步骤。
#!/usr/bin/env bash
set -euo pipefail
echo "部署环境:$DEPLOY_ENV,版本:$VERSION"
# 示例:打包
tar czf app-${
VERSION}
.tar.gz target/app.jar
# 示例:备份旧包
ssh user@${
DEPLOY_ENV}
-server "mkdir -p /opt/backups &
&
[ -f /opt/app/app.jar ] &
&
cp /opt/app/app.jar /opt/backups/app-${
VERSION}
-$(date +%F_%H%M%S).jar"
# 示例:上传并重启
scp target/app.jar user@${
DEPLOY_ENV}
-server:/opt/app/app.jar
ssh user@${
DEPLOY_ENV}
-server "systemctl restart app &
&
systemctl is-active --quiet app || {
echo '启动失败';
exit 1;
}
"
四 多平台与 Linux 节点编排
- 使用 agent { label ‘linux’ } 指定在带有 linux 标签的节点运行;也可在 agent none 下为不同阶段指定不同 label(如 windows、macos、linux),实现跨平台流水线。
- 示例(片段)
- 说明:不同操作系统使用各自工具链(如 msbuild、make),通过标签将任务调度到对应代理节点。
pipeline {
agent none
stages {
stage('Build on Linux') {
agent {
label 'linux' }
steps {
sh 'mkdir -p build &
&
cd build &
&
cmake .. &
&
make' }
}
stage('Build on Windows') {
agent {
label 'windows' }
steps {
bat 'mkdir build &
&
cd build &
&
cmake .. &
&
msbuild MyApp.sln /t:Rebuild /p:Configuration=Release' }
}
}
}
五 最佳实践与排错要点
- 脚本与权限
- 将脚本纳入 Git 管理,保持与代码一致;在 Linux 上确保脚本具备可执行权限(如 chmod +x),并在脚本首行声明解释器(如 #!/usr/bin/env bash)。
- 节点与环境
- 为 Linux 代理打上明确 label(如 linux),在 agent 或 node 中精确调度;必要时使用 tool auto-provisioning 或 Docker 镜像统一构建环境。
- 参数与凭证
- 通过 parameters 驱动环境/版本/开关;敏感信息使用 Credentials 插件(如 Username with password、SSH Username with private key),在 withCredentials 中使用,避免明文。
- 稳定性与可观测性
- 在关键阶段使用 set -euo pipefail、显式退出码;为测试阶段归档 JUnit 报告;在 post 中统一处理 成功/失败 通知与清理。
- 安全与合规
- 禁止在脚本中硬编码密码/密钥;最小权限运行 Jenkins Agent;必要时启用 audit logging 与 approval 门禁(生产部署)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Jenkins于Linux如何定制构建脚本
本文地址: https://pptw.com/jishu/748440.html
