温馨提示×

Ubuntu Jenkins如何实现自定义脚本执行

小樊
45
2025-11-16 19:40:12
栏目: 智能运维

Ubuntu 上实现 Jenkins 自定义脚本执行

一 方式总览与选择

  • Freestyle 项目:通过构建步骤中的Execute shell直接写命令或调用脚本,适合简单任务与快速落地。
  • Pipeline 项目:用 **Jenkinsfile(Groovy DSL)**编排多阶段流程,可纳入版本控制,适合复杂与可复用场景。
  • 远程执行:在 Jenkins 节点上执行脚本,并通过 SSH 免密将产物或变更分发到目标服务器(如 Nginx 静态站点)。

二 前置准备

  • 安装与启动:在 Ubuntu 上安装并启动 Jenkins,确保服务可用(默认端口 8080)。
  • 基础工具:安装项目所需的解释器与环境,例如 Python 3、构建工具、测试框架等。
  • 权限与路径:确保工作空间与脚本具备可执行权限,并在 Jenkins 的构建环境里配置好必要的环境变量与工具路径

三 方式一 Freestyle 项目执行自定义脚本

  • 新建任务:选择Freestyle project,在“构建”中点击Add build step → Execute shell
  • 在命令框中直接写入脚本或调用本地脚本,例如:
    #!/usr/bin/env bash
    set -euo pipefail
    echo "Running custom script..."
    chmod +x ./build.sh
    ./build.sh
    python3 test.py
    
  • 保存并点击Build Now,在控制台输出查看执行结果与日志。

四 方式二 Pipeline 项目执行自定义脚本

  • 在代码库根目录创建 Jenkinsfile,示例:
    pipeline {
      agent any
      stages {
        stage('Checkout') {
          steps { git 'https://github.com/your-org/your-repo.git' }
        }
        stage('Build') {
          steps { sh './build.sh' }
        }
        stage('Test') {
          steps { sh './run-tests.sh' }
        }
        stage('Report') {
          steps {
            junit '**/test-reports/*.xml'
            publishHTML(target: [
              allowMissing: false,
              alwaysLinkToLastBuild: true,
              keepAll: true,
              reportDir: 'test-reports',
              reportFiles: 'index.html',
              reportName: 'Test Report'
            ])
          }
        }
      }
    }
    
  • 在 Jenkins 中新建Pipeline任务,选择Pipeline script from SCM → Git,填写仓库 URL 与凭证,指定 Script Path(如 Jenkinsfile),保存并构建。

五 方式三 远程执行与发布示例

  • 在 Jenkins 节点生成 SSH 密钥并分发到目标服务器,实现免密登录
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa -q
    ssh-copy-id user@target-host
    
  • 编写部署脚本(如 deploy.sh),在 Jenkins 中调用以拉取代码并发布到 Nginx
    #!/usr/bin/env bash
    set -euo pipefail
    APP="bird"
    APP_PATH="/var/www/html"
    HOSTS=("10.0.0.13" "10.0.0.14")
    
    download() {
      rm -rf "$APP"
      git clone git@your-gitlab.com:dev/"$APP".git
    }
    
    deploy() {
      for h in "${HOSTS[@]}"; do
        scp -r "$APP"/* "$h:$APP_PATH/"
      done
    }
    
    download
    deploy
    
  • 在 Freestyle 的Execute shell或 Pipeline 的 sh 步骤中执行该脚本,完成拉取与发布。

六 常见问题与最佳实践

  • 权限与解释器:脚本需chmod +x;在 shebang 中显式声明(如 #!/usr/bin/env bash),避免环境差异导致失败。
  • 环境一致性:在 Jenkins 节点预装并验证 Python 3、依赖与工具链;必要时在构建步骤前显式安装或加载环境。
  • 日志与报告:使用 set -euo pipefail 提前暴露错误;结合 JUnitHTML Publisher 输出测试与质量报告,便于回溯。
  • 安全与可维护性:优先采用 Pipeline + SCM 管理脚本;涉及远程操作尽量使用SSH 密钥或受控凭据,避免明文密码。

0