首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jenkins管道:在不同的码头主机上运行步骤

Jenkins管道:在不同的码头主机上运行步骤
EN

Stack Overflow用户
提问于 2022-06-10 09:55:55
回答 1查看 65关注 0票数 1

根据这篇文章,我刚刚在我的jenkins服务器上设置了docker构建奴隶,以转移到静态构建节点。

我遇到了一个小问题。我使用bitbucket和bcbsn更新构建状态。我不喜欢在我所有的构建奴隶中安装go并维护它,所以我考虑使用bcbsn中的docker映像,如下所示

代码语言:javascript
复制
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}

我已经阅读了这篇关于运行码头内码头的文章以及所有的利弊,得出结论,我不喜欢这样做。

因此,我希望在主节点上或仅在我为构建奴隶设置的对接主机上运行。这个是可能的吗?如果是的话,怎么做呢?

我自己的尝试

代码语言:javascript
复制
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的管道中的片段:

在我最初的构建步骤中:

代码语言:javascript
复制
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}"
                }
           }
     }

在我的贴子里:

代码语言:javascript
复制
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}"
                }
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-10 10:43:00

如果您想使用与用于Docker类的Jenkins管道插件交互的全局变量方法,那么在使用声明式管道语法时,需要在script块中嵌套这些方法:

代码语言:javascript
复制
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 */
          }
        }
      }
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72572347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档