如果我想為特定階段定義代理,我遇到了管道問題。
def call(Map pipelineParams) {
pipeline {
environment {
// Environment variables for Docker
DOCKERCREDS = credentials('odyssey-artifactory-token')
COMPONENT = 'listener-publisher-service'
REGISTRY_PATH = 'com.csg.ops.it.prf'
REGISTRY = 'docker-dev.odyssey.rowini.net'
}
options {
disableConcurrentBuilds()
timeout(time: 1, unit: 'HOURS')
}
agent none
stages {
stage('Docker') {
agent {
label 'docker'
}
steps {
sh '''
docker build -t $REGISTRY/$REGISTRY_PATH/$COMPONENT:$POM_VERSION . --force-rm=true
docker login -u $DOCKERCREDS_USR -p $DOCKERCREDS_PSW $REGISTRY
docker push $REGISTRY/$REGISTRY_PATH/$COMPONENT:$VERSION
docker rmi $REGISTRY/$REGISTRY_PATH/$COMPONENT:$VERSION
docker logout $REGISTRY
'''
}
}
}
}
}
我收到以下錯誤:
11:03:09 org.jenkinsci.plugins.workflow.steps.MissingContextVariableException: Required context class hudson.FilePath is missing
11:03:09 Perhaps you forgot to surround the code with a step that provides this, such as: node
11:03:09 at org.jenkinsci.plugins.workflow.steps.StepDescriptor.checkContextAvailability(StepDescriptor.java:266)
11:03:09 at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:296)
11:03:09 at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:193)
11:03:09 at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)
11:03:09 at sun.reflect.GeneratedMethodAccessor294.invoke(Unknown Source)
11:03:09 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
11:03:09 at java.lang.reflect.Method.invoke(Method.java:498)
11:03:09 at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
11:03:09 at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
11:03:09 at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
11:03:09 at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
11:03:09 at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
11:03:09 at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
11:03:09 at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
11:03:09 at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:163)
11:03:09 at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
11:03:09 at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:158)
11:03:09 at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:161)
11:03:09 at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:165)
11:03:09 at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:135)
11:03:09 at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:135)
11:03:09 at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
11:03:09 at runJenkinsPipeline.call(runJenkinsPipeline.groovy)
11:03:09 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.withEnvBlock(ModelInterpreter.groovy:431)
11:03:09 at com.cloudbees.groovy.cps.CpsDefaultGroovyMethods.callClosureForMapEntry(CpsDefaultGroovyMethods:5226)
11:03:09 at com.cloudbees.groovy.cps.CpsDefaultGroovyMethods.collect(CpsDefaultGroovyMethods:3446)
11:03:09 at com.cloudbees.groovy.cps.CpsDefaultGroovyMethods.collect(CpsDefaultGroovyMethods:3463)
11:03:09 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.withEnvBlock(ModelInterpreter.groovy:429)
11:03:09 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.call(ModelInterpreter.groovy:78)
11:03:09 at org.jenkinsci.plugins.pipeline.modeldefinition.ModelInterpreter.withCredentialsBlock(ModelInterpreter.groovy:476)
11:03:09 at ___cps.transform___(Native Method)
11:03:09 at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:86)
11:03:09 at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:113)
11:03:09 at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixName(FunctionCallBlock.java:78)
11:03:09 at sun.reflect.GeneratedMethodAccessor288.invoke(Unknown Source)
11:03:09 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
11:03:09 at java.lang.reflect.Method.invoke(Method.java:498)
11:03:09 at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
11:03:09 at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
11:03:09 at com.cloudbees.groovy.cps.Next.step(Next.java:83)
11:03:09 at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)
11:03:09 at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)
11:03:09 at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:129)
11:03:09 at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:268)
11:03:09 at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)
11:03:09 at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18)
11:03:09 at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:51)
11:03:09 at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:185)
11:03:09 at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:400)
11:03:09 at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$400(CpsThreadGroup.java:96)
11:03:09 at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:312)
11:03:09 at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:276)
11:03:09 at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:67)
11:03:09 at java.util.concurrent.FutureTask.run(FutureTask.java:266)
11:03:09 at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:139)
11:03:09 at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
11:03:09 at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)
11:03:09 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
11:03:09 at java.util.concurrent.FutureTask.run(FutureTask.java:266)
11:03:09 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
11:03:09 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
11:03:09 at java.lang.Thread.run(Thread.java:748)
11:03:09 Finished: FAILURE
但是,如果我在階段之外定義代理,我不會收到任何錯誤。
def call(Map pipelineParams) {
pipeline {
environment {
// Environment variables for Docker
DOCKERCREDS = credentials('odyssey-artifactory-token')
COMPONENT = 'listener-publisher-service'
REGISTRY_PATH = 'com.csg.ops.it.prf'
REGISTRY = 'docker-dev.odyssey.rowini.net'
}
options {
disableConcurrentBuilds()
timeout(time: 1, unit: 'HOURS')
}
agent {
label 'docker'
}
stages {
stage('Docker') {
steps {
sh '''
docker build -t $REGISTRY/$REGISTRY_PATH/$COMPONENT:$POM_VERSION . --force-rm=true
docker login -u $DOCKERCREDS_USR -p $DOCKERCREDS_PSW $REGISTRY
docker push $REGISTRY/$REGISTRY_PATH/$COMPONENT:$VERSION
docker rmi $REGISTRY/$REGISTRY_PATH/$COMPONENT:$VERSION
docker logout $REGISTRY
'''
}
}
}
}
}
我檢查了有關 Jenkins 管道語法的檔案,但我的代碼沒有發現任何問題。你知道我做錯了什么嗎?
uj5u.com熱心網友回復:
您會看到此錯誤,因為塊credentials內使用的輔助方法environment需要node給定執行背景關系中的背景關系。您可以通過暫時注釋掉這部分代碼來看到這一點,并且您的初始管道不會因此而失敗。
您可以通過在節點上運行的內部定義environment塊來解決此問題:stagedocker
pipeline {
environment {
COMPONENT = 'listener-publisher-service'
REGISTRY_PATH = 'com.csg.ops.it.prf'
REGISTRY = 'docker-dev.odyssey.rowini.net'
}
options {
disableConcurrentBuilds()
timeout(time: 1, unit: 'HOURS')
}
agent none
stages {
stage('Docker') {
agent {
label 'docker'
}
environment {
// Environment variables for Docker
DOCKERCREDS = credentials('odyssey-artifactory-token')
}
steps {
sh '''
docker build -t $REGISTRY/$REGISTRY_PATH/$COMPONENT:$POM_VERSION . --force-rm=true
docker login -u $DOCKERCREDS_USR -p $DOCKERCREDS_PSW $REGISTRY
docker push $REGISTRY/$REGISTRY_PATH/$COMPONENT:$VERSION
docker rmi $REGISTRY/$REGISTRY_PATH/$COMPONENT:$VERSION
docker logout $REGISTRY
'''
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/459127.html
