【问题标题】:add build parameter in jenkins build schedule在詹金斯构建计划中添加构建参数
【发布时间】:2016-04-08 06:36:33
【问题描述】:

我有一份詹金斯的工作。我想使用构建参数在特定时间构建我的工作。

我想通过使用Build periodically 选项来做到这一点。

我有这样的输入:

*/1 * * * * Parameter1

如果我这样做,jenkins 会显示错误。

这是否可能不使用任何插件

如果没有,比哪个插件更好

或者有没有办法在时间表中提供参数?

我的实际需求是这样的:

 build in morning using one parameter
 build in evening using another parameter.    

【问题讨论】:

    标签: jenkins jenkins-plugins


    【解决方案1】:

    基本上,使用“定期构建”选项,您无法使用参数安排 Jenkins 作业。

    但是,要在不同时间安排需要使用不同环境的作业,您必须使用parameterized-scheduler 插件或在 (管理 Jenkins -> 管理插件 -> 参数化调度程序)。

    例子:

     # Parameter1
     H/15 * * * * %Parameter1
     # Parameter2
     H/30 * * * * %Parameter2
    

    请记住,您必须已经设置好参数,因为该插件仅对带有参数的作业可见。

    节点和标签参数插件可以提供帮助,因为它允许您选择单个节点,假设您的不同服务器 qa1 和 qa2 已经配置。希望能为您澄清事情。

    【讨论】:

    • 嗯,这和我之前提供的解决方案一样:((见我的帖子+我的评论)
    • 你从克劳迪奥和布鲁诺那里得到了超级解决方案......:)。在上午 10.30 点构建:cron 工作将像这样:30 10 * * * %build_param=value 在晚上 6:30 构建:cron 工作将像这样:30 18 * * * %build_param=value
    • 这个插件现在可以工作了吗?我无法在“使用参数计划文本框定期构建”中使用以下文本计划参数化构建 49 11 * * * % slavename=VMOMEGAPERF01
    【解决方案2】:

    使用本机 Jenkins crontab,这是不可能的。

    但是使用这个插件应该是可能的: https://github.com/jwmach1/parameterized-scheduler

    您必须分叉存储库并构建此插件 + 手动安装。

    本教程介绍了如何构建自定义插件: https://wiki.jenkins-ci.org/display/JENKINS/Plugin+tutorial

    (设置环境+构建插件)

    【讨论】:

    • 感谢您的明智建议。但这是否可以像这样使用:H/15 * * * * %Server=qa1 H/30 * * * * %Server=qa2 我想在不同的服务器上给出两个时间表。
    • 或使用任何 if else 条件,例如早上在 qa1 服务器中执行,其他时间在 qa2 服务器中执行
    • 也许您可以尝试将我的解决方案与此插件混合使用:wiki.jenkins-ci.org/display/JENKINS/NodeLabel+Parameter+Plugin。它允许使用参数管理节点名称。
    【解决方案3】:

    也许不是你想要的,但这是我发现的一个有趣的技巧,所以我决定分享。您可以根据环境以编程方式设置 Jenkins 作业的参数。

    # check if job was trigered by timer
    if [ $(env | grep -E '^BUILD_CAUSE=TIMERTRIGGER$') ] ; then 
      # your logic here, utilise the power of bash   
      if [ $(date +"%H") -eq 16 ] ; then PARAM=VALUE_1 ; fi
      if [ $(date +"%H") -eq 17 ] ; then PARAM=VALUE_2 ; fi
    fi
    

    【讨论】:

    • BUILD_CAUSE 变量取决于 EnvInject 插件
    【解决方案4】:

    如果没有插件,您可以尝试克隆作业,并使用不同的参数值创建构建计划。 IE。你可能有job_morningjob_evening

    How do I clone a job in jenkins?

    【讨论】:

      【解决方案5】:

      如果有默认值,则可以调度参数化作业。

      这里我将举一个使用 Jenkinsfile 的例子。假设在您的管道脚本中定义了一个参数testUserName

      pipeline {
          parameters {
              string(name: 'testUserName', defaultValue: 'defaultTestUser', 
                      description: 'Username to use for test scenarios')
          }
      
          stages {
              stage('Run tests') {
                  steps {
                      sh "mvn verify --batch-mode -Dtest.user=${params.testUserName}"
                  }
              }
          }
      }
      

      当您按下“立即构建”按钮时,作业将首次运行而无需请求参数(将使用defaultValue)。在第一次运行中下载并处理 Jenkinsfile 后,按钮名称将更改为“使用参数构建”。您单击按钮并键入另一个用户(不是 Jenkinsfile 中定义的默认用户)。问题是您键入的值不会在作业运行之间持续存在。它将始终重置为defaultValue

      为了防止在作业运行之间重置值,请替换

      defaultValue: 'defaultTestUser'
      

      defaultValue: params.testUserName ?: 'defaultTestUser'
      

      现在,作业将始终使用先前在“使用参数构建”中指定的值运行。在dev.to找到这个解决方案

      【讨论】:

      • 这很酷。如果您不想更改代码,或者想要保留默认值但仍然能够重用运行中的参数,您可以使用Rebuilder plugin.
      猜你喜欢
      • 2012-10-13
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多