在Jenkins Pipeline中访问作业/插件配置值

110次阅读
没有评论

问题描述

在使用Jenkins的Pipeline时,希望能够从Pipeline内部访问作业配置页面上设置的值。这些值既不作为参数提供,也不作为环境变量注入。

安装及设置

  • Jenkins版本:v2.263.1
  • GitLab Branch Source插件版本:v1.5.3(链接
  • 多分支Pipeline作业,指向Gitlab存储库
  • Remote Jenkinsfile Provider插件版本:v1.13(链接

问题

通常情况下,Jenkinsfile会位于存储库的根目录,因此源码管理(scm)与我们要检出和构建的存储库相关联。然而,在这种情况下,我想要构建的代码位于与Jenkinsfile不同的存储库中(因此需要Remote Jenkinsfile Provider插件)。

这意味着我需要显式在Pipeline中检出我希望构建的代码,而为了做到这一点,我需要知道存储库的信息。然而,这个存储库已经在作业配置中定义。

Branch Source插件可以将诸如分支名称、合并请求编号/分支/目标等内容导出为适当的环境变量,但并未导出实际存储库。

由于这是一个多分支Pipeline,我也不能像使用envInject那样使用(多分支作业与其他作业不提供“为运行准备环境”的选项)。

目标

我希望能够访问作业配置页面上设置的serverownerproject字段。最终,我可以只访问项目的ssh/http地址。

如何从Pipeline中访问作业配置

你可以采取一些方式来从Pipeline中访问作业配置的信息。以下是一种可能的方法:

方案

请注意,下面的示例代码基于Groovy语言,用于Jenkins的Pipeline脚本。

  1. 在Pipeline脚本中,使用Jenkins.instance.getItemByFullName来获取作业实例。
  2. 使用getProperty方法来获取作业属性(参数)的值。你需要传递GitLab项目参数的类名作为参数。你可以在插件的API文档中找到这个类名。

下面是一个示例代码片段,展示了如何从作业配置中获取GitLab项目参数的值:

def job = Jenkins.instance.getItemByFullName('YourJobFullName')
def gitLabProjectProperty = job.getProperty(io.jenkins.plugins.gitlabbranchsource.GitLabProjectProperty)
if (gitLabProjectProperty) {
    def server = gitLabProjectProperty.getServer()
    def owner = gitLabProjectProperty.getOwner()
    def project = gitLabProjectProperty.getProject()
    // 在这里可以使用 server、owner 和 project 的值进行后续操作
} else {
    echo 'GitLabProjectProperty not found'
}

在上面的示例中,我们首先获取作业实例,然后使用getProperty方法获取GitLab项目参数的属性。如果找到了属性,我们可以通过调用相应的方法获取serverownerproject的值,然后在后续操作中使用这些值。

注意

  • 代码中的'YourJobFullName'需要替换为你的作业的全名。
  • io.jenkins.plugins.gitlabbranchsource.GitLabProjectProperty是根据插件的类名指定的,具体类名可能需要根据插件的版本进行调整。

其他方案

如果你的需求类似于在多个存储库之间共享一个Jenkinsfile或构建Pipeline,你可以考虑使用Jenkins的Shared Libraries。Shared Libraries允许你将所有的构建Pipeline代码放入一个单独的共享库中,然后从各个存储库的Jenkinsfile中调用共享库中的代码。

总结

通过使用Jenkins Pipeline脚本,你可以访问作业配置页面上设置的值。通过获取作业实例并获取相应的属性,你可以获得所需的信息,以便在Pipeline中进行后续操作。同时,也可以考虑使用Shared Libraries来更好地组织和管理Pipeline的代码。

正文完