我正在尝试列出输入选项中的所有标签(GitLab),但我不知道该怎么做。
我想要做的是能够选择标签并基于该标签执行部署到不同的环境。
谢谢你。
我提出了这样一个在 dsl 声明式管道中工作的解决方案:
代码:
pipeline {
agent any
stages {
stage('PollSCM') {
steps {
checkout([$class: 'GitSCM', branches: [[name: 'master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'xxx', url: 'repo']]])
script {
tags = sh(script: "git tag --sort=v:refname | tail -5 ", returnStdout: true).trim()
}
}
}
stage('CHOICE TAG') {
steps {
script {
def tag_response = input message: 'blah blah tags',
parameters: [choice(choices: "${tags}", description: 'blah', name: '')]
env.tag_response = tag_response
}
}
}
stage ('echo choose') {
steps {
echo "I choose: '${tag_response}'"
}
}
}
}
实际上还有另一种语法可以使用
git-parameter
插件(已由 Git 插件和 Git 客户端插件提供)获取参数内的分支/标签列表,版本 0.9.4 或更高版本:
pipeline {
agent any
parameters{
gitParameter name: 'TAG_OR_BRANCH',
type: 'PT_BRANCH_TAG',
defaultValue: 'master'
}
stages {
stage('Checkout') {
steps {
checkout([$class: 'GitSCM', branches: [[name: "${params.TAG_OR_BRANCH}"]], doGenerateSubmoduleConfigurations: false, extensions: [], gitTool: 'Default', submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/jenkinsci/git-parameter-plugin.git']] ])
}
}
stage('Test') {
steps {
script {
// Here you can also use a regex to match a pattern, 1.x.x-ALPHA, BETA etc.
if (("${params.TAG_OR_BRANCH}" == "master")){
echo "Do something from master branch"
}
}
}
}
}
}
上面的示例将列出分支和标签,所选选项将保存在变量
${params.TAG_OR_BRANCH}
中,但您也可以通过使用 type:
的相应选项仅列出分支、仅标签等。
这也适用于 GUI 结帐 SCM,即您可以删除上面示例中的结帐阶段,并在 jenkins GUI 上询问分支名称时使用
${params.TAG_OR_BRANCH}
。
请参阅 git-parameter doc 了解更多信息。