我想在Jenkinsfile中有一个发布阶段,该阶段仅在从原始存储库中检出时才运行。这是为了避免由于缺少存储库密钥等而导致克隆存储库上出现错误消息。
stage('Release')
{
when
{
allOf
{
// TODO Check for repository url https://github.com/PowerStat/TemplateEngine.git
branch 'master'
}
}
steps
{
script
{
if (isUnix())
{
sh 'mvn --batch-mode release:clean'
sh 'mvn --batch-mode release:prepare'
sh 'mvn --batch-mode release:perform'
}
else
{
bat 'mvn --batch-mode release:clean'
bat 'mvn --batch-mode release:prepare'
bat 'mvn --batch-mode release:perform'
}
}
}
}
我已经研究过Pipeline Syntax: when,但不知道如何进行自己想要的测试。
我还考虑过使用环境变量Global Variable Reference,但发现其中没有存储库URL。
所以我的问题是:如何在无标度管道中实施此检查?
答案 0 :(得分:1)
您可以从git config remote.origin.url
命令获取远程存储库URL。您可以使用expression
块内的when
指令执行此命令-它定义了一个返回boolean
值的闭包。
考虑以下示例:
def expectedRemoteUrl = "https://github.com/PowerStat/TemplateEngine.git"
pipeline {
agent any
stages {
stage("Release") {
when {
allOf {
branch 'tmp'
expression {
def remoteUrl = isUnix() ?
sh(script: "git config remote.origin.url", returnStdout: true)?.trim() :
bat(script: "git config remote.origin.url", returnStdout: true)?.trim()
return expectedRemoteUrl == remoteUrl
}
}
}
steps {
echo "Do your release steps here..."
}
}
}
}
或者,如果在运行管道的节点中没有git
命令,则可以使用scm.userRemoteConfigs?.first()?.url
获取远程存储库URL。考虑以下示例:
def expectedRemoteUrl = "https://github.com/PowerStat/TemplateEngine.git"
pipeline {
agent any
stages {
stage("Release") {
when {
allOf {
branch 'tmp'
expression {
def remoteUrl = scm.userRemoteConfigs?.first()?.url
return expectedRemoteUrl == remoteUrl
}
}
}
steps {
echo "Do your release steps here..."
}
}
}
}