【问题标题】:Jenkinsfile with list-git-branches-parameter-plugin带有 list-git-branches-parameter-plugin 的 Jenkinsfile
【发布时间】:2025-12-07 11:40:02
【问题描述】:

请帮助我将 jenkinsci/list-git-branches-parameter-plugin 合并到我的 jenkinsfile 中。我可以在构建/管道中创建,但我无法通过 jenkinsfile 找到使用此插件的任何示例。

【问题讨论】:

    标签: jenkins plugins jenkins-pipeline


    【解决方案1】:

    通过猜测和检查得到它。这是 jenkinsfile 的片段。

            listGitBranches(
                branchFilter: 'origin.*/(.*)',
                defaultValue: 'default',
                name: 'nameOfVariable',
                type: 'BRANCH',
                remoteURL: 'https://repo.url/repo.git',
                credentialsId: 'credID')
    

    【讨论】:

    【解决方案2】:

    如果使用Git Parameter 也可以(而不是建议的原始插件),我发现此解决方案易于维护且方便。

    此方法描述了组成 Jenkins 管道所需的设置,该管道动态“轮询”(列出)特定存储库的所有分支,然后允许用户在运行此作业的构建时使用某些特定分支运行管道。

    这里的假设是:

    • Jenkins 服务器是 2.204.2(托管在 Ubuntu 18.04 上)
    • 存储库托管在 BitBucket 中。

    首先要做的是提供 Jenkins 凭据以连接(和“获取”)BitBucket 中的私有存储库。这可以通过创建一个 SSH 密钥对来“链接”托管 Jenkins 服务器的机器上的 Jenkins (!!) 用户和(私有)BitBucket 存储库。

    1. 首先要为 Jenkins 用户(即运行 Jenkins 服务器的用户 - 它很可能在安装时默认创建)创建一个 SSH 密钥:

      guya@ubuntu_jenkins:~$ sudo su jenkins 
      [sudo] password for guya:
      jenkins@ubuntu_jenkins:/home/guya$ ssh-keygen
      

      输出应类似于以下内容:

    生成公钥/私钥 rsa 密钥对。输入保存密钥的文件
    (/var/lib/jenkins/.ssh/id_rsa):创建目录'/var/lib/jenkins/.ssh'。 Enter passphrase (empty for no passphrase): Enter the same passphrase again: 您的身份已保存在 /var/lib/jenkins/.ssh/id_rsa 中。您的公钥已保存在 /var/lib/jenkins/.ssh/id_rsa.pub 中。密钥指纹为:SHA256:q6PfEthg+74QFwO+esLbOtKbwLG1dhtMLfxIVSN8fQY jenkins@ubuntu_jenkins 密钥的随机艺术图像为: +---[RSA 2048]----+ | . .. o.E. | | . . .o... o | | . o..o | | +.oo | | . ooX..S | |..+.Bo* . | |.++oo* o. | |..+*..*o | | .=+o==+。 | +----[SHA256]-----+ jenkins@ubuntu_jenkins:/home/guya$

    1. 现在需要在 BitBucket 存储库中设置此 SSH 密钥的内容,如下所示:
    • 访问:Settings --> Access keys --> Add key,在 BitBucket 存储库中创建(添加)一个 SSH 密钥。
    • 授予密钥读取权限并将 PUBLIC 密钥的内容复制到密钥的“正文”。可以通过运行显示key的内容:cat /var/lib/jenkins/.ssh/id_rsa.pub
    1. 在 BitBucket 存储库中设置 SSH 密钥后,我们需要“告诉”Jenkins 在尝试获取(在本例中为读取)存储库的内容时实际使用它。请注意,让 Jenkins 知道,实际上意味着让用户 jenkins 这个“特权”。

    这可以通过将带有私钥的新 SSH 用户名添加到 Jenkins --> Credentials --> System --> Global Credentials --> Add credentials 来完成。

    • 在 ID 部分中,为密钥添加任何描述性名称。
    • 在用户名部分输入 Jenkins 服务器的用户名jenkins
    • 勾选 Private key 部分并粘贴之前通过复制粘贴以下内容生成的 PRIVATE key 的内容:~/.ssh/id_rsa。这是以字符串:-----BEGIN RSA PRIVATE KEY----- 开头并以字符串:-----END RSA PRIVATE KEY----- 结尾的私钥。请注意,应将整个“块”复制并粘贴到上述部分中。
    1. 安装可在其official page here 中找到的 Git 参数插件

    2. 列出(动态)给定存储库的所有分支所需的最小管道如下:

      pipeline 
      { 
          agent any parameters
          { 
              gitParameter branchFilter: 'origin/(.*)', defaultValue: 'master', name: 'BRANCH', type: 'PT_BRANCH' 
          }
          stages 
          { 
             stage("list all branches") 
             { 
                 steps 
                 { 
                      git branch: "${params.BRANCH}", credentialsId: "SSH_user_name_with_private_key", url: "ssh://git@myCompanyBitBucketSite.com:port/myRepository.git" 
                 } 
            } 
         } 
      }
      

    注意事项:

    • defaultValue 设置为master,这样如果不存在分支,它将显示在管道的“下拉列表”中。
    • credentialsId 具有之前配置的凭据名称。
    • 在这种情况下,我在 url 参数中使用了存储库的 SSH URL。
    • 此答案假定(并已配置)git 服务器是 BitBucket。我假设在初始步骤中完成的所有“管理”设置在 GitHub 中都有其等效设置。

    【讨论】: