Jenkins管道检测分支,可参数化

Jenkins管道检测分支,可参数化,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我试图在Jenkins文件中编写一个阶段,在该阶段中,我将从Jenkins作业传递分支名称,以在特定位置签出代码 stage("Prepare") { steps { checkout([$class: 'GitSCM', branches: [[name: '*/master' ]], extensions: scm.extensions,

我试图在Jenkins文件中编写一个阶段,在该阶段中,我将从Jenkins作业传递分支名称,以在特定位置签出代码

stage("Prepare") {
        steps {
            checkout([$class: 'GitSCM',
                        branches: [[name: '*/master' ]],
                        extensions: scm.extensions,
                        userRemoteConfigs: [[
                            url: 'https://gitlab.example.com/user/example_repo.git',
                            credentialsId: 'my-gitlab-repo-creds'
                        ]]
                    ])
        }
    }

此外,我们如何定义项目的签出位置。

您错过了项目的功能。反过来,您的管道缺少一些重要的配置来获得您想要的:

  • 从Jenkins作业传递分支名称以签出代码
  • 定义签出项目的位置
  • 这一切都可以做到。我将解释用于实现此目的的选项

    1)将分支名称传递到签出步骤

    您可以通过
    分支机构名称
    实现这一点

    2)定义项目签出位置

    添加以下扩展名并去掉
    scm.extensions

    extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'myrepo']]
    
    指定一个本地目录(相对于工作区根目录),其中将签出Git存储库。如果留空,将使用工作区根目录本身

    对于
    分支
    选项

    最安全的方法是使用refs/heads/语法。这样,预期的分支是明确的

    例如:

    branches: [[name: 'refs/heads/${env.BRANCH_NAME}']]
    
    拼凑起来

    checkout(
      [
        $class: 'GitSCM',
        extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'example_repo']],
        branches: [[name: 'refs/heads/${env.BRANCH_NAME}']],
        userRemoteConfigs: [
          [
            url: 'https://gitlab.example.com/user/example_repo.git',
            credentialsId: 'my-gitlab-repo-creds',
            name: 'origin'
          ]
        ]
      ]
    )
    

    上面的代码将签出
    ${env.BRANCH\u NAME}
    的分支
    https://gitlab.example.com/user/example_repo.git
    $WORKSPACE\u DIR/example\u repo
    文件夹。

    需要将第二个项目克隆到不同的位置,并尝试参数化分支名称是两件不同的事情。最终目标是什么?将分支参数化并封装到dir('directory-name'){…}块中?