用 Jenkins 做一些自动化工作

目测现在的团队喜欢用 Jenkins 来处理一些自动化的工作。由于需要在前人的基础上做一些东西,于是我也用了一下 Jenkins. Jenkins 的官方文档有基本的教程,这里记录一些我用到的地方和遇到的问题。

安装 Jenkins

安装方法就是在官网下载一个 WAR 包,然后运行它。之后就是在 Web 界面操作了。
安装默认的插件即可。 在国内因为网络原因,某些插件可能会安装失败,重试几次即可。

创建 Pipeline

所谓的自动化工作,就是为了让 Jenkins 自己去执行一段脚本。这个脚本是 Groovy 语法的 Jenkinsfile.
所以,可以把想让 Jenkins 执行的动作写到一个 Jenkinsfile 中,然后创建一个 Pipeline. 每次在这个 Pipeline 上执行 Build 的操作,其实就是在运行这个脚本。 将这个脚本文件命名为 Jenkinsfile, 上次到 git 上备用。
在 Jenkins 界面中,选择 New item, 输入 item name 后,选择 Pipeline 类型并继续。在详情页的 Pipe 一栏中,填入 Git Repository URL, 指定 Branch 和文件名,保存配置即可。
要运行 Jenkinsfile 的脚步,在 Pipeline 的页面里点击 Build Now 即可。

添加参数

如果想每次 build 的时候接收用户的参数,可以在 Jenkinsfile 里添加类似以下内容:

properties(
  [
    [
      $class: 'ParametersDefinitionProperty',
      parameterDefinitions: [
        [
          name: 'NUMBER_OF_APPLE',
          description: 'How many apple do we want to cut?',
          $class: 'hudson.model.StringParameterDefinition',
          defaultValue: ''
        ]
      ]
    ]
  ]
)

后期可以在脚本中以 params.NUMBER_OF_APPLE 来引用这个参数的值。

添加这个参数后,执行这个 Build job 一次。然后在 Jenkins 的界面上, Build Now 就会变成 Build with Parameters,然后会让用户提供参数再执行 build job.

定义 Cronjob

如果想脚本定期执行,可以使用 Jenkins 的 cron. 在脚本中添加以下属性:

properties(
  [
    pipelineTriggers([[$class: "TimerTrigger", spec: "1 1 * * 2"]])
  ]
)

格式是 cron 的格式。

调用其他 build job

如果需要调用其他 Jenkins build job, 可以直接用 build job 命令.

build job: 'name_of_the_other_job', parameters: [[$class: 'StringParameterValue', name: 'NUMBER_OF_PEOPLE', value: "10"]]

try-catch

默认情况下,只要 Jenkinsfile 里的任意环节出了错误,整个 Jenkins Build Job 就会宣告失败。
我们可以用 try-catch 结构来 catch 这些错误,这个不至于导致整个 Jenkins job 失败。

    try{
      sh "echo hello"
    } catch (err) {
      echo "the script failed, but let's continue."
    }