使用指定回购中的Git分支动态填充Jenkins选择参数

mke*_*z00 60 git parameters branch choice jenkins

我有一个参数化的Jenkins作业,需要在特定的Git仓库中输入特定的Git分支.目前,此参数是字符串参数.

有没有办法让这个参数成为一个选择参数,并用Git分支动态填充下拉列表?我不希望有人通过在每次创建新分支时手动配置下拉列表来维护此选项参数.

Rav*_*jar 79

我尝试了这个链接中提到的几个答案,但无法弄清楚如何告诉Jenkins有关用户选择的分支.正如我在上面的线程中的前一条评论中所提到的,我将分支选择器字段留空了.

但是,在进一步的调查中,我找到了另一种方法来做同样的事情 - https://wiki.jenkins-ci.org/display/JENKINS/Git+Parameter+Plugin 我发现这个方法简单得多,而且事情少了配置!

这是我配置的 -

  1. 安装了git参数插件
  2. 检查'此构建已参数化'并添加了'Git参数'
  3. 添加了以下值: 作业中的Git参数插件配置

  4. 然后在作业的git SCM部分,我添加了"名称"部分中提到的相同值,就好像它是一个环境变量.(如果你仔细阅读了这个git参数插件的帮助,你会意识到这一点) 分支选择器

在此之后我刚刚运行构建,选择了我的分支(Jenkins在构建之前检查了这个分支)并且它成功完成了构建,并选择了我指定的分支.

  • 已知限制/错误:git参数插件不支持Jenkins从站设置,git repos仅在从站上检出 (6认同)
  • 不幸的是,我无法获得没有“origin/”的分支名称。${BRANCH_SELECTOR##*/} 在注入变量时不起作用。 (2认同)
  • @AmokHuginnsson它在7月初发行并发布.jenkins-ci.org/browse/JENKINS-16290 (2认同)

mal*_*cot 20

扩展选择参数插件允许您从文件中读取选项.

当然,现在您还有另一个问题:如何确保文件是最新的(可以使用提交后挂钩完成)并传播给所有用户(可以通过将其放在共享上来完成)文件服务器).但可能有更好的解决方案.

  • 我们使用[可扩展选择参数插件](https://wiki.jenkins-ci.org/display/JENKINS/Extensible+Choice+Parameter+plugin)和一个groovy脚本:`return [""] .plus([ "powershell","(git.exe ls-remote -h http:// review/Project)-replace' \\ w {40} \\ trefs/heads /'"] .execute().text.tokenize() )`.它是PowerShell,因为它在Windows机器上,但您可以用其他工具替换RegEx替换.这将使列表在每次加载时都更新,而无需外部文件. (7认同)

ver*_*ius 14

我能够使用Jenkins动态参数插件实现此结果.我使用了动态选择参数选项,对于选择脚本,我使用了以下内容:

proc1 = ['/bin/bash', '-c', "/usr/bin/git ls-remote -h ssh://user@server.com/path/to/repo.git"].execute()
proc2 = ['/bin/bash', '-c', "awk '{print \$2}'"].execute()
proc3 = ['/bin/bash', '-c', "sed s%^refs/heads%origin%"].execute()

all = proc1 | proc2 | proc3
String result = all.text

String filename = "/tmp/branches.txt"
boolean success = new File(filename).write(result) 

def multiline = "cat /tmp/branches.txt".execute().text
def list = multiline.readLines()
Run Code Online (Sandbox Code Playgroud)

  • 作为补充,我发现ssh并不总是可用但不一定需要.另一种方法是使用这样的东西:`proc1 = ['/ bin/bash',' - c',"/ usr/bin/git ls-remote -h user@server.com:path/to/repo. git"].execute()`这在使用github时特别有用. (2认同)
  • 很好的答案,但不幸的是,由于远程代码执行漏洞,动态参数插件已从 Jenkins 分发中暂停,因此我不得不投反对票:https://jenkins.io/security/advisory/2017-04-10/#动态参数插件 (2认同)

小智 10

使用"Git Parameter Plug-in"非常简单.

添加名称,如"SELECT_BRANCH"##确保此变量,因为稍后将使用此变量.然后参数类型:分支

然后联系SCM:选择:Git和分支说明符:$ {SELECT_BRANCH}

要验证,请在jenkins中执行以下shell:

echo $ {SELECT_BRANCH}

env.enter这里的图像描述

在此输入图像描述


idr*_*ene 7

对于我,我使用输入阶段参数:

  1. 我通过检查 git 项目来开始我的管道。
  2. 我使用 awk 命令生成一个包含所有分支列表的 barnch.txt 文件
  3. 在 stage setps 中,我读取文件并使用它来生成输入选择参数

当用户启动管道时,这个管道将等待他在列表选项中进行选择。

pipeline{
agent any

stages{

    stage('checkout scm') {
        steps {
            script{
                git credentialsId: '8bd8-419d-8af0-30960441fcd7', url: 'ssh://jenkins@git.company.com:/usr/company/repositories/repo.git'
                sh 'git branch -r | awk \'{print $1}\' ORS=\'\\n\' >>branch.txt'
            }

        }
    }
     stage('get build Params User Input') {
        steps{
            script{

                liste = readFile 'branch.txt'
                echo "please click on the link here to chose the branch to build"
                env.BRANCH_SCOPE = input message: 'Please choose the branch to build ', ok: 'Validate!',
                        parameters: [choice(name: 'BRANCH_NAME', choices: "${liste}", description: 'Branch to build?')]


            }
        }
    } 
    stage("checkout the branch"){
        steps{
            echo "${env.BRANCH_SCOPE}"
            git  credentialsId: 'ea346a50-8bd8-419d-8af0-30960441fcd7', url: 'ssh://jenkins@git.company.com/usr/company/repositories/repo.git'
            sh "git checkout -b build ${env.BRANCH_NAME}"
        }
    }
    stage(" exec maven build"){
        steps{
            withMaven(maven: 'M3', mavenSettingsConfig: 'mvn-setting-xml') {
               sh "mvn clean install "
            }
        }
    }
    stage("clean workwpace"){
        steps{
            cleanWs()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

然后用户将与构建交互:

在此处输入图片说明

在此处输入图片说明


小智 5

我在这里面临类似的问题。我们的用户正在将他们的工作从自由式迁移到流水线。他们不希望 Jenkinsfile 存储在他们的存储库中(历史原因)并且仍然想使用“Git Parameter”插件

所以我们必须使用“管道脚本”并开发一个不同的插件,它的工作原理类似于“Git Parameter”。

这个新插件没有与项目中的 SCM 设置集成。该插件位于https://plugins.jenkins.io/list-git-branches-parameter

希望对你也有帮助