【问题标题】:Set the pipeline name and description from Jenkinsfile从 Jenkinsfile 设置管道名称和描述
【发布时间】:2016-07-22 17:21:56
【问题描述】:

我正在尝试将 jenkins 管道作为代码进行 poc。我正在使用 Github 组织文件夹插件来扫描 Github 组织并为每个分支创建作业。有没有办法明确定义从 Jenkinsfile 获得的管道作业的名称?我还想为这些工作添加一些描述。

【问题讨论】:

标签: jenkins devops jenkinsfile


【解决方案1】:

您需要使用currentBuild,如下所示。 node 部分很重要

node {
    currentBuild.displayName = "$yournamevariable-$another"
    currentBuild.description = "$yourdescriptionvariable-$another"
}

编辑:上面的一个重命名构建,原始问题是关于重命名工作。 管道中的以下脚本将执行此操作(这需要适当的权限

item = Jenkins.instance.getItemByFullName("originalJobName")
item.setDescription("This description was changed by script")
item.save()
item.renameTo("newJobName")

【讨论】:

  • 您好 Jayan,感谢您的回复。我已经尝试过 currentBuild.description 选项。它显示为构建历史部分中构建号下的标签。但我希望以这样的方式设置它们,使它们显示在作业的“查看配置”选项下。这可行吗?
  • 在插件选项中没有看到方法。以上答案已更新为使用 renameTo api(您可能已经看过)
  • 非常感谢贾扬。这就像一个魅力。正是我想要的。我必须通过在 Jenkins->In-Process 脚本批准下批准它们来确保允许这些脚本运行。有没有办法在这里手动添加新的类?我现在这样做的方式是为我在此脚本中使用的任何类一次选择一个批准选项。它不允许我手动输入任何课程并批准。
  • 这应该是一个新问题。也请接受/投票:meta.stackexchange.com/questions/5234/…
  • 最初的问题是关于job,而不是个人build
【解决方案2】:

我参加这个聚会迟到了,但是这个问题迫使我参加了今天大部分时间都在#jenkins 聊天。我要感谢那次聊天中的 @tang^ 帮助我以一种优雅的方式解决了这个问题。

要在多分支 DECLARATIVE 管道中为子级设置 JOB 描述和 JOB 显示名称,请在阶段中使用以下步骤块:

steps {
    script {
        if(currentBuild.rawBuild.project.displayName != 'jobName') {
            currentBuild.rawBuild.project.description = 'NEW JOB DESCRIPTION'
            currentBuild.rawBuild.project.setDisplayName('NEW JOB DISPLAY NAME')
        }
        else {
            echo 'Name change not required'
        }
    }
}

这将要求您通过 Jenkins 沙盒批准方法批准各个脚本调用,但它比我在网络上找到的关于重命名父管道的实际子级的任何其他方法都简单得多。最后要注意的是,这应该在 Jenkinsfile 中工作,您可以在其中使用环境变量来操作正在设置的作业项。

【讨论】:

  • org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper getRawBuild
  • “这将要求您通过 Jenkins 沙箱批准方法批准各个脚本调用”鉴于修改作业所需的访问权限,您将需要批准几个类才能在沙箱外执行。跨度>
【解决方案3】:

我尝试使用已接受答案中的代码 sn-p 在 Jenkinsfile 中描述我的 Jenkins 管道。我必须使用 @NonCPS 注释将代码 sn-p 包装到函数中,并将 def 用于项目变量。我已将代码 sn-p 放在 Jenkinsfile 的根目录中,而不是节点部分。

@NonCPS 
def setDescription() { 
    def item = Jenkins.instance.getItemByFullName(env.JOB_NAME) 
    item.setDescription("Some description.") 
    item.save()
}

setDescription()

【讨论】:

  • org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod jenkins.model.Jenkins getInstance
  • @kyb,只需转到 Jenkins->Manage Jenkins->In-Process Script Approval,您应该注意到提到的签名待批准。请注意,这被认为是危险的。
猜你喜欢
  • 2018-01-26
  • 2016-07-29
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多