首页主机资讯Jenkins于Linux如何定制构建脚本

Jenkins于Linux如何定制构建脚本

时间2025-11-14 21:19:04发布访客分类主机资讯浏览880
导读:在 Linux 上定制 Jenkins 构建脚本的实用指南 一 选择项目类型与存放方式 项目类型 Pipeline:用 Groovy 编写,推荐以 Jenkinsfile 纳入代码仓库,便于版本化与复用(Declarative 或 Sc...

在 Linux 上定制 Jenkins 构建脚本的实用指南

一 选择项目类型与存放方式

  • 项目类型
    • Pipeline:用 Groovy 编写,推荐以 Jenkinsfile 纳入代码仓库,便于版本化与复用(Declarative 或 Scripted 均可)。
    • Freestyle:通过图形界面添加构建步骤,适合简单任务或快速接入。
  • 存放方式
    • Inline:在 Jenkins 任务配置里直接写脚本(适合临时或简单脚本)。
    • SCM:从 Git 等拉取脚本(推荐,便于团队协作与审计)。
  • 基本流程
    • 新建任务(选择 PipelineFreestyle)→ 配置源码管理(如 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(如 windowsmacoslinux),实现跨平台流水线。
  • 示例(片段)
    • 说明:不同操作系统使用各自工具链(如 msbuildmake),通过标签将任务调度到对应代理节点。
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),在 agentnode 中精确调度;必要时使用 tool auto-provisioningDocker 镜像统一构建环境。
  • 参数与凭证
    • 通过 parameters 驱动环境/版本/开关;敏感信息使用 Credentials 插件(如 Username with passwordSSH Username with private key),在 withCredentials 中使用,避免明文。
  • 稳定性与可观测性
    • 在关键阶段使用 set -euo pipefail、显式退出码;为测试阶段归档 JUnit 报告;在 post 中统一处理 成功/失败 通知与清理。
  • 安全与合规
    • 禁止在脚本中硬编码密码/密钥;最小权限运行 Jenkins Agent;必要时启用 audit loggingapproval 门禁(生产部署)。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Jenkins于Linux如何定制构建脚本
本文地址: https://pptw.com/jishu/748440.html
VirtualBox虚拟机如何调整内存 PHP在Linux上如何配置缓存

游客 回复需填写必要信息