Reputation: 4769
I'm using Jenkins file that located in my git repository.
I have configured new job using the pipeline script from SCM that point to my jenkinsfile
. I'm trying to use in my Jenkins file pipeline script the git module in order to pull my data from my git repo without configure pre-static variable and just to use the variable of the repository URL under pipeline script from SCM that already was configured in my job .
There is a way to get somehow the variable Repository URL
from this plugin without using parameters in my Jenkins pipeline script.
I have already tried the environment variable GIT_URL
and other stuff that related to git from here but this didn't work.
Upvotes: 18
Views: 36008
Reputation: 4321
env.GIT_URL
can be used to access the git url that was used to obtain the Jenkinsfile. The branch is in env.GIT_BRANCH
.
Works here:
checkout(
[
$class: 'GitSCM',
branches: [[name: env.GIT_BRANCH]],
doGenerateSubmoduleConfigurations: false,
submoduleCfg: [],
userRemoteConfigs: [[
credentialsId: 'XXX',
url: env.GIT_URL
]]
]
)
Upvotes: 0
Reputation: 410
I believe that the best solution is like this answer. An example using declarative pipeline:
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
}
}
}
}
}
Note - this does a full checkout. If that is not desirable, I would try to handle that in checkout parameters (like here)
Upvotes: 1
Reputation: 10415
You can find all information about scm in scm
variable (instance of GitSCM if you are using git).
You can get repository URL this way
def repositoryUrl = scm.userRemoteConfigs[0].url
But if you just want to checkout that repository you can simply invoke checkout scm
without needing to specify anything else. See checkout step
Upvotes: 27
Reputation: 11132
Probably not directly a solution for your particular case, as you're working with git.
But for those still working with SVN using the SubversionSCM
, the repository URL can be obtained using
def repositoryUrl = scm.locations[0].remote
Upvotes: 2
Reputation: 4769
from this post I found a way that you can use the checkout scm to get the git repo url like this:
checkout scm
def url = sh(returnStdout: true, script: 'git config remote.origin.url').trim()
but checkout scm will pull the code and I want to avoid from that.
So I found another way (not the pretty one):
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}"
}
}
this is did the trick for me.
Upvotes: 3