对于部署作业,我想设置一个jenkins作业,该作业从特定的Azure库中接收所有现有标签,并使其可以在Active Choice参数中进行选择。
我尝试了几件事,但没有任何效果。在下面的代码中,您可以看到我尝试使用的最后一个代码。我想拉一个其中包含我们的azure cli和我们的配置的docker容器,此后,我想访问该容器并启动一个azure命令(尚不在代码中,但它会更早失败)。我得到的错误是
groovy.lang.MissingMethodException: No signature of method Script1.sh() is applicable for argument types: (Java.lang.String) values: "docker login -u... and so on"
def dockerImage = 'ourRegistry/deploy/azure'
def output = []
try {
sh 'docker login -u="our_robot_user" -p="TOKEN" ourRegistry && docker pull ${dockerImage}'
dockerRun = docker.image(dockerImage).withRun('--env-file=azure.env')
dockerRun.inside("-u user") {
output.push("INSIDE")
//res = sh(returnStdout: true, script: 'az acr repository show-tags --name xx --subscription "xx" --repository "xx"')
//output.push(res)
}
} catch (error) {
output.push(error)
}
return output
是否甚至可以在主动选择参数中运行它?还是可以导入特定的库来使它正常工作?还是有更好的方法?
答案 0 :(得分:0)
我已经成功复制了完整的方案(即“设置一个Jenkins作业,该作业从特定的Azure容器注册表存储库中接收所有现有标签,并在我们构建作业时将其用作参数进行选择”的要求)按照以下提到的过程进行操作。
仅供参考,这是通过使用“选择参数”来实现的,如下面的屏幕截图所示。
以下Jenkins管道脚本正常运行的前提条件是
请在下面找到Jenkins管道脚本。
#!groovy
import groovy.transform.Field
import org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript
def props = []
@Field
def newParams = []
node {
try {
regenerateJob = (params.RegenerateJob == null) ? true : params.RegenerateJob
}
catch (MissingPropertyException e) {
regenerateJob = true
}
stage('test'){
withCredentials([azureServicePrincipal('JENKINSSERVICEPRINCIPALCREDENTIALID')]) {
def shtagsoutput = sh (returnStdout: true, script: '''az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID > /dev/null
az account set -s $AZURE_SUBSCRIPTION_ID > /dev/null
shtagsoutputtemp=$(az acr repository show-tags --name "AZURECONTAINERREGISTRYNAME" --subscription $AZURE_SUBSCRIPTION_ID --repository "AZURECONTAINERREGISTRYREPOSITORYNAME" | jq '.[]')
shtagsoutputtempfinal=$(echo $shtagsoutputtemp | sed 's/"//g')
echo "${shtagsoutputtempfinal}"''').split(' ')
shtagsoutputfinal = [shtagsoutput].flatten()
newParams += [$class: 'ChoiceParameterDefinition', name: 'Phase', choices: shtagsoutputfinal]
newParams += [$class: 'BooleanParameterDefinition', name: 'RegenerateJob', defaultValue: false]
props += [$class: 'ParametersDefinitionProperty', parameterDefinitions: newParams]
properties(properties: props)
}
}
}
请注意,创建此Jenkins作业时,它没有任何参数。但是,在第一次构建后,将重新生成Jenkins作业,并使用其新参数进行选择。
干杯!
关于, 克里希纳