jenkins pipeline 从 scm 获取管道脚本下的存储库 url 变量

问题描述 投票:0回答:5

我正在使用位于我的 git 存储库中的 Jenkins 文件。 我已经使用 SCM 中指向我的

jenkinsfile
的管道脚本配置了新作业。我正在尝试在 Jenkins 文件管道脚本中使用 git 模块,以便从 git 存储库中提取数据,而无需配置预静态变量,而只是使用已配置的 SCM 管道脚本下的存储库 URL 的变量在我的工作中。 有一种方法可以以某种方式获取变量 Repository URL 来自此插件,而不在我的 Jenkins 管道脚本中使用参数。

我已经尝试过环境变量

GIT_URL
以及来自here的其他与git相关的东西,但这不起作用。

jenkins jenkins-pipeline
5个回答
26
投票

您可以在

scm
变量中找到有关 scm 的所有信息(如果您使用 git,则为 GitSCM 的实例)。 您可以通过这种方式获取存储库 URL

def repositoryUrl = scm.userRemoteConfigs[0].url  

但是,如果您只想签出该存储库,您只需调用

checkout scm
即可,无需指定任何其他内容。请参阅结帐步骤


3
投票

从这个post我找到了一种方法,你可以使用checkout scm来获取git repo url,如下所示:

checkout scm
def url = sh(returnStdout: true, script: 'git config remote.origin.url').trim()

但是 checkout scm 会提取代码,我想避免这种情况。

所以我找到了另一种方法(不是漂亮的方法):

node('master'){

  try{
        GIT_REPO_URL = null
        command = "grep -oP '(?<=url>)[^<]+' /var/lib/jenkins/jobs/${JOB_NAME}/config.xml"
        GIT_REPO_URL = sh(returnStdout: true, script: command).trim();
        echo "Detected Git Repo URL: ${GIT_REPO_URL}"  
    }
    catch(err){
        throw err
        error "Colud not find any Git repository for the job ${JOB_NAME}"
  }

}

这对我有用。


2
投票

可能不是直接适合您特定情况的解决方案,因为您正在使用 git。

但是对于那些仍然使用

SubversionSCM
使用 SVN 的人来说,可以使用

获取存储库 URL
def repositoryUrl = scm.locations[0].remote

1
投票

我相信最好的解决方案就像this答案。 使用声明式管道的示例:

pipeline {
  agent any;
  stages  {
    stage('test'){
      steps {
        script {
          def s = checkout scm;
          if      (s.GIT_URL != null) print s.GIT_URL
          else if (s.SVN_URL != null) print s.SVN_URL
          else print s
        }
      }
    }
  }
}

注意 - 这会进行完整的结账。如果这是不可取的,我会尝试在结帐参数中处理它(像这里


0
投票

env.GIT_URL
可用于访问用于获取 Jenkinsfile 的 git url。分行位于
env.GIT_BRANCH

在这里工作:

checkout(
    [
        $class: 'GitSCM', 
        branches: [[name: env.GIT_BRANCH]],
        doGenerateSubmoduleConfigurations: false,
        submoduleCfg: [],
        userRemoteConfigs: [[
            credentialsId: 'XXX',
            url: env.GIT_URL
        ]]                      
    ]
)
© www.soinside.com 2019 - 2024. All rights reserved.