尝试在 jenkins 中启动 docker-compose 构建

K.K*_*oli 5 jenkins docker-compose

我正在尝试使用 jenkinsfile 在一个非常简单的 jenkins 作业中运行 docker-compose 构建。

\n

我正在使用 scm 的管道来获取源代码,如下所示:

\n

屏幕截图\n下面的快照

\n

我使用的jenkins文件如下:

\n
import jenkins.model.*\njenkins = Jenkins.instance\n\nnode{\n\n    stage(\xe2\x80\x98Build\xe2\x80\x99) {\n\n      sh \xe2\x80\x98docker-compose -f /var/lib/jenkins/workspace/Docker-compose-test/heb_acceptance_test/docker-compose.yml up --build\xe2\x80\x99 \n    }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但构建一直失败。这是失败日志

\n
> git checkout -f d4d004337dc5ffa2bdcfb21e4c0d93c468289311\nCommit message: "just trying syntax"\n > git rev-list --no-walk d4d004337dc5ffa2bdcfb21e4c0d93c468289311 # timeout=10\nRunning in Durability level: MAX_SURVIVABILITY\n[Pipeline] node\n[Pipeline] End of Pipeline\nan exception which occurred:\n    in field groovy.lang.Closure.delegate\n    in object org.jenkinsci.plugins.workflow.cps.CpsClosure2@64757627\n    in field org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.closures\n    in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@357f33e2\n    in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@357f33e2\nCaused: java.io.NotSerializableException: hudson.model.Hudson\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)\n    at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)\n    at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)\n    at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)\n    at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)\n    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)\n    at java.util.LinkedHashMap.internalWriteEntries(LinkedHashMap.java:333)\n    at java.util.HashMap.writeObject(HashMap.java:1363)\n    at sun.reflect.GeneratedMethodAccessor861.invoke(Unknown Source)\n    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n    at java.lang.reflect.Method.invoke(Method.java:498)\n    at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:273)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)\n    at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)\n    at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)\n    at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)\n    at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)\n    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)\n    at com.cloudbees.groovy.cps.SerializableScript.writeObject(SerializableScript.java:26)\n    at sun.reflect.GeneratedMethodAccessor950.invoke(Unknown Source)\n    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n    at java.lang.reflect.Method.invoke(Method.java:498)\n    at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:273)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)\n    at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)\n    at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)\n    at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)\n    at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)\n    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)\n    at java.util.HashMap.internalWriteEntries(HashMap.java:1790)\n    at java.util.HashMap.writeObject(HashMap.java:1363)\n    at sun.reflect.GeneratedMethodAccessor861.invoke(Unknown Source)\n    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n    at java.lang.reflect.Method.invoke(Method.java:498)\n    at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:273)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)\n    at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)\n    at org.jboss.marshalling.AbstractObjectOutput.writeObject(AbstractObjectOutput.java:58)\n    at org.jboss.marshalling.AbstractMarshaller.writeObject(AbstractMarshaller.java:111)\n    at org.jenkinsci.plugins.workflow.support.pickles.serialization.RiverWriter.lambda$writeObject$0(RiverWriter.java:144)\n    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)\n    at org.jenkinsci.plugins.workflow.support.pickles.serialization.RiverWriter.writeObject(RiverWriter.java:143)\n    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:482)\n    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:458)\n    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgramIfPossible(CpsThreadGroup.java:445)\n    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:372)\n    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$200(CpsThreadGroup.java:83)\n    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:244)\n    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:232)\n    at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)\n    at java.util.concurrent.FutureTask.run(FutureTask.java:266)\n    at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:131)\n    at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)\n    at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)\n    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\n    at java.util.concurrent.FutureTask.run(FutureTask.java:266)\n    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n    at java.lang.Thread.run(Thread.java:748)\nFinished: FAILURE\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试运行该命令,并将与 -fdocker-compose up链接起来,但得到了相同的结果,所以看来我在这里遗漏了一些基本的东西。docker-compose.yml

\n

任何帮助将不胜感激,谢谢。

\n

K.K*_*oli 7

通过稍微更改 jenkinsfile 语法

\n
pipeline {\n    \n    agent any\n    \n    stages {\n        stage(\xe2\x80\x98Build\xe2\x80\x99) {\n            steps {\n                sh '/usr/local/bin/docker-compose up --build'\n            }\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

它现在工作正常,似乎我使用的 jenkinsfile 语法已经过时了。

\n


小智 3

这是因为您将 Jenkins 实例分配给管道内的变量。

Jenkins 假设作业可以中断、暂停和恢复,并且要实现这一点,需要所有管道数据可序列化。

Jenkins 实例不是:

Caused: java.io.NotSerializableException: hudson.model.Hudson
Run Code Online (Sandbox Code Playgroud)

您可能不需要导入 jenkins 模型并使用 Jenkins 实例。没有这些,您的管道也将正常工作。

但是,如果您需要在 jenkins 实例上执行一些操作,您可以使用NonCPS注释。

import jenkins.model.Jenkins

// pipeline
node {
    def bar = foo()
}

@NonCPS
def foo() {
    jenkins = Jenkins.instance
    ...
Run Code Online (Sandbox Code Playgroud)