根据这篇文章,我刚刚在我的jenkins服务器上设置了docker构建奴隶,以转移到静态构建节点。
我遇到了一个小问题。我使用bitbucket和bcbsn更新构建状态。我不喜欢在我所有的构建奴隶中安装go并维护它,所以我考虑使用bcbsn中的docker映像,如下所示
docker run utrecht/bcbsn:2.0.4 -clientID ${clientID} -clientSecret ${clientSecret} -state FAILED -commit ${env.GIT_COMMIT} -name ${buildName} -repoSlug talentindicator -owner talentinsights -url ${env.JOB_URL} -key ${buildName}我已经阅读了这篇关于运行码头内码头的文章以及所有的利弊,得出结论,我不喜欢这样做。
因此,我希望在主节点上或仅在我为构建奴隶设置的对接主机上运行。这个是可能的吗?如果是的话,怎么做呢?
我自己的尝试
stages {
stage ('Staging'){
steps {
withCredentials([usernamePassword(credentialsId: '6eab2fcc-7703-4d92-9e7d-120d66f771b3 ', usernameVariable: 'clientID', passwordVariable: 'clientSecret')]) {
docker.withServer('tcp://192.168.0.247:4243') {
docker.image('utrecht/bcbsn:2.0.4').withRun("-clientID ${clientID} -clientSecret ${clientSecret} -state INPROGRESS -commit ${env.GIT_COMMIT} -name ${buildName} -repoSlug talentindicator -owner talentinsights -url ${env.JOB_URL} -key ${buildName}") {
/* do nothing */
}
}
}
}
}这会导致
Method calls on objects not allowed outside "script" blocks.
我使用bcbsn的管道中的片段:
在我最初的构建步骤中:
stages {
stage ('Staging'){
steps {
withCredentials([usernamePassword(credentialsId: '00000000-0000-0000-0000-000000000000', usernameVariable: 'clientID', passwordVariable: 'clientSecret')]) {
sh "docker run utrecht/bcbsn:2.0.4 -clientID ${clientID} -clientSecret ${clientSecret} -state INPROGRESS -commit ${env.GIT_COMMIT} -name ${buildName} -repoSlug talentindicator -owner talentinsights -url ${env.JOB_URL} -key ${buildName}"
}
}
}在我的贴子里:
post {
//https://jenkins.io/doc/pipeline/tour/post/
changed {
script {
hasChanged = true
}
}
success {
script {
if(hasChanged){
echo '************** First success in a while! '
}
}
withCredentials([usernamePassword(credentialsId: '00000000-0000-0000-0000-000000000000', usernameVariable: 'clientID', passwordVariable: 'clientSecret')]) {
sh "docker run utrecht/bcbsn:2.0.4 -clientID ${clientID} -clientSecret ${clientSecret} -state SUCCESSFUL -commit ${env.GIT_COMMIT} -name ${buildName} -repoSlug talentindicator -owner talentinsights -url ${env.JOB_URL} -key ${buildName}"
}
}
failure {
script {
if(hasChanged){
echo '************** Build broke '
}
}
echo "Setting build status in Bitbucket"
withCredentials([usernamePassword(credentialsId: '00000000-0000-0000-0000-000000000000', usernameVariable: 'clientID', passwordVariable: 'clientSecret')]) {
sh "docker run utrecht/bcbsn:2.0.4 -clientID ${clientID} -clientSecret ${clientSecret} -state FAILED -commit ${env.GIT_COMMIT} -name ${buildName} -repoSlug talentindicator -owner talentinsights -url ${env.JOB_URL} -key ${buildName}"
}
}
}发布于 2022-06-10 10:43:00
如果您想使用与用于Docker类的Jenkins管道插件交互的全局变量方法,那么在使用声明式管道语法时,需要在script块中嵌套这些方法:
stage ('Staging'){
steps {
script {
withCredentials([usernamePassword(credentialsId: '6eab2fcc-7703-4d92-9e7d-120d66f771b3 ', usernameVariable: 'clientID', passwordVariable: 'clientSecret')]) {
docker.withServer('tcp://192.168.0.247:4243') {
docker.image('utrecht/bcbsn:2.0.4').withRun("-clientID ${clientID} -clientSecret ${clientSecret} -state INPROGRESS -commit ${env.GIT_COMMIT} -name ${buildName} -repoSlug talentindicator -owner talentinsights -url ${env.JOB_URL} -key ${buildName}") {
/* do nothing */
}
}
}
}
}
}https://stackoverflow.com/questions/72572347
复制相似问题