温馨提示×

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

小樊
42
2025-12-08 13:02:45
栏目: 智能运维

在 Ubuntu 上使用 Jenkins 执行自定义脚本的完整指南

一 环境准备与前提

  • Ubuntu 上安装并启动 Jenkins,默认监听 8080 端口;首次访问完成解锁与插件安装。
  • 确保运行 Jenkins 的用户(如 jenkins)对脚本与工作目录具备读/执行权限
  • 若脚本依赖 Git、Docker、Python 等工具,需在 Jenkins 节点上预先安装并配置好环境变量与凭据。

二 方式一 Pipeline 项目执行脚本

  • 新建任务:在 Jenkins 首页选择 New Item → Pipeline,命名并保存。
  • 定义脚本来源:
    • 直接在页面使用 Pipeline script 编写 Groovy;
    • 更推荐 Pipeline script from SCM,从 Git 仓库拉取 Jenkinsfile
  • 示例 Jenkinsfile(放于仓库根目录,路径可在 SCM 步骤中指定):
pipeline {
  agent any

  stages {
    stage('Build') {
      steps {
        sh './build_script.sh'
      }
    }
    stage('Test') {
      steps {
        sh './test_script.sh'
      }
    }
    stage('Deploy') {
      steps {
        sh './deploy_script.sh'
      }
    }
  }
}
  • 脚本准备与权限:在项目根目录放置 build_script.sh / test_script.sh / deploy_script.sh,并赋予可执行权限:
chmod +x *.sh
  • 保存后点击 Build Now,在控制台输出中查看执行结果与日志。

三 方式二 Freestyle 项目执行脚本

  • 新建任务:选择 New Item → Freestyle project
  • 构建步骤:在 Build 区域点击 Add build step → Execute shell,输入要执行的命令或脚本路径,例如:
#!/usr/bin/env bash
set -euo pipefail
echo "Running custom script..."
./your_script.sh
  • 保存并构建,查看 Console Output 定位问题。

四 实用场景示例 拉取代码并发布到远程 Web 服务器

  • 在 Jenkins 节点生成 SSH 密钥 并配置到目标 Web 服务器的 authorized_keys,实现免密登录:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa -q
ssh-copy-id 10.0.0.13
ssh-copy-id 10.0.0.14
  • 编写发布脚本(示例路径 /yinzhengjie/script/jenkins/deploy-bird-script.sh):
#!/usr/bin/env bash
set -euo pipefail

HOST_LIST="10.0.0.13 10.0.0.14"
APP=bird
APP_PATH=/var/www/html

download() {
  rm -rf "${APP}"
  git clone git@www.yinzhengjie.com:dev/bird.git
}

deploy() {
  for i in ${HOST_LIST}; do
    scp -r "${APP}"/* "${i}:${APP_PATH}/"
  done
}

download
deploy
  • 在 Jenkins 中新建任务(Freestyle 或 Pipeline),在构建步骤中执行该脚本或将其纳入 Jenkinsfile 的某个 stage;构建后通过浏览器访问 http://<web_ip>/ 验证发布结果。

五 常见问题与最佳实践

  • 权限与路径:确保 Jenkins 用户对脚本与工作区有执行/读写权限;脚本首行建议使用 #!/usr/bin/env bash;必要时使用绝对路径。
  • 幂等与清理:在脚本开头做好目录清理锁文件机制,避免并发构建冲突。
  • 日志与失败处理:使用 set -euo pipefail 让脚本在错误时立即退出;关键步骤打印日志,便于在 Console Output 排查。
  • 凭据与密钥:拉取 Git、登录远程主机或推送镜像时,使用 Jenkins Credentials 管理 SSH 私钥/用户名密码,避免明文存放。
  • 容器化运行:若使用 Docker 运行 Jenkins,按需挂载 /var/run/docker.sock 与工具链,确保容器内可调用宿主机 Docker(仅在可信环境下使用)。

0