Jenkins:访问管道内的 job/plugin 配置值

Jenkins: Access job/plugin configuration values inside pipeline

我正在尝试从我的管道中访问作业配置页面上设置的值。这些值不作为参数提供,也不作为环境变量注入。

设置

问题

通常,在 repo 的根目录中会有一个 Jenkinsfile,因此 scm 将与我们要检出和构建的 repo 相关联。但是,在我的例子中,我想要构建的代码位于 Jenkinsfile 的不同回购协议中(因此 Remote Jenkinsfile Provider 插件)。

这意味着我需要检查我希望构建的代码作为管道中的一个显式步骤,为此我需要知道 repo。然而,这个 repo 已经在作业配置中定义。

Branch Source 插件确实将分支名称或合并请求 number/branch/target 之类的内容导出到适当的环境变量中,但不是实际的 repo。

因为这是一个多分支管道,我也不能使用类似 envInject 的东西(多分支作业不提供 'Prepare an environment for the run' 与其他作业一样的选项)

目标

我希望能够访问作业配置页面中设置的 serverownerproject 字段。最终我什至可以只用项目的 ssh/http 地址来管理。

是否有一些聪明的方法可以从管道内访问作业的配置?

感谢您的任何建议!

参考图片

gitlab branch source plugin (and the documentation) 中,您可以获得比普通分支源插件更多的信息。项目有环境变量,例如 GITLAB_PROJECT_GIT_SSH_URL/GITLAB_PROJECT_GIT_HTTPS_URL 用于 git 源等等。到目前为止,我还没有看到一个用于服务器的,但它可以解析我们的 URL。

在此信息中,检查存储库并构建它应该相当容易。

通过这个过程很清楚,还需要手动触发管道,这通常也可以使用变量(不确定远程文件插件)。我假设您的 Jenkinsfile 是一个 groovy 脚本,它提供了很多可能性。您可以定义变量并使用一些逻辑来确定是否使用环境变量或参数。

pipeline {

    parameters {
        string(name: 'projectUrl', defaultValue: "")
    }
    stages {
            stage('Prepare') {
                steps {
                    def projectUrl = env.GITLAB_PROJECT_GIT_SSH_URL ?: params.projectUrl
                    // DO Checkout with projectUrl
                }
            }
    }
}

您必须考虑的唯一关键事项是多分支管道必须 运行 一次,对于每个分支或 mr - 因此它们检测变量。之后,您可以通过提供您的值手动轻松触发它。

这允许您利用 webhooks 进行自动操作,还允许您随时手动触发构建。

旁注:如果您使用集中式 jenkinsfile,为了减少重复,您可能还想查看 jenkins 的共享库。

为了完整起见,这里列出了 jenkins gitlab 分支源插件版本 1.5.3 添加的所有当前环境变量(仅适用于推送事件 - 但它们在其他事件中非常相似也有类型)

GITLAB_OBJECT_KIND
GITLAB_AFTER
GITLAB_BEFORE
GITLAB_REF
GITLAB_CHECKOUT_SHA
GITLAB_USER_ID
GITLAB_USER_NAME
GITLAB_USER_EMAIL
GITLAB_PROJECT_ID
GITLAB_PROJECT_ID_2
GITLAB_PROJECT_NAME
GITLAB_PROJECT_DESCRIPTION
GITLAB_PROJECT_WEB_URL
GITLAB_PROJECT_AVATAR_URL
GITLAB_PROJECT_GIT_SSH_URL
GITLAB_PROJECT_GIT_HTTP_URL
GITLAB_PROJECT_NAMESPACE
GITLAB_PROJECT_VISIBILITY_LEVEL
GITLAB_PROJECT_PATH_NAMESPACE
GITLAB_PROJECT_CI_CONFIG_PATH
GITLAB_PROJECT_DEFAULT_BRANCH
GITLAB_PROJECT_HOMEPAGE
GITLAB_PROJECT_URL
GITLAB_PROJECT_SSH_URL
GITLAB_PROJECT_HTTP_URL
GITLAB_REPO_NAME
GITLAB_REPO_URL
GITLAB_REPO_DESCRIPTION
GITLAB_REPO_HOMEPAGE
GITLAB_REPO_GIT_SSH_URL
GITLAB_REPO_GIT_HTTP_URL
GITLAB_REPO_VISIBILITY_LEVEL
GITLAB_COMMIT_COUNT
GITLAB_COMMIT_ID_#
GITLAB_COMMIT_MESSAGE_#
GITLAB_COMMIT_TIMESTAMP_#
GITLAB_COMMIT_URL_#
GITLAB_COMMIT_AUTHOR_AVATAR_URL_#
GITLAB_COMMIT_AUTHOR_CREATED_AT_#
GITLAB_COMMIT_AUTHOR_EMAIL_#
GITLAB_COMMIT_AUTHOR_ID_#
GITLAB_COMMIT_AUTHOR_NAME_#
GITLAB_COMMIT_AUTHOR_STATE_#
GITLAB_COMMIT_AUTHOR_USERNAME_#
GITLAB_COMMIT_AUTHOR_WEB_URL_#
GITLAB_COMMIT_ADDED_#
GITLAB_COMMIT_MODIFIED_#
GITLAB_COMMIT_REMOVED_#
GITLAB_REQUEST_URL
GITLAB_REQUEST_STRING
GITLAB_REQUEST_TOKEN
GITLAB_REFS_HEAD