SH命令悬挂在Jenkins管道中
我希望有人在这里为我提供一些指导:
我正在使用Jenkins(2.289.3)作为Docker容器来在MacBook Monterey中运行一些CI作业。这是
docker run -d \
-u root \
--name jenkins \
-p 9080:8080 \
-v ./jenkins_home:/var/jenkins_home \
-v "$HOME":/home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins
我使用Jenkinsfile来构建项目的Docker命令。以下是代码:
#!/usr/bin/env groovy
node {
def workspace = pwd()
stage('checkout') {
checkout scm
sh "echo checkout" ## this works fine!
}
docker.image('openjdk:17-jdk-alpine').inside('-u root -e MAVEN_OPTS="-Duser.home=./my-service/"') {
stage('check java') {
sh "java -version" ## this fails!
}
stage('artifact build and deploy') {
configFileProvider([configFile(fileId: 'gcRepositoryCred', variable: 'GC_MVN_REPOSITORY_CREDENTIAL'),configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) {
sh "chmod +x my-service/mvnw"
sh "./my-service/mvnw -f my-service/pom.xml clean deploy -DskipTests -s $MAVEN_SETTINGS"
}
}
}
}
它在 sh“ java -version”
中失败。基本上它悬挂了一段时间,我得到以下错误代码:
[Pipeline] sh
+ echo checkout
checkout
[Pipeline] }
[Pipeline] // stage
[Pipeline] isUnix
[Pipeline] sh
+ docker inspect -f . openjdk:17-jdk-alpine
.
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 0:0 -u root -e MAVEN_OPTS=-Duser.home=./my-service/ -w /var/jenkins_home/workspace/my-service -v /var/jenkins_home/workspace/my-service:/var/jenkins_home/workspace/my-service:rw,z -v /var/jenkins_home/workspace/my-service@tmp:/var/jenkins_home/workspace/my-service@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** openjdk:17-jdk-alpine cat
$ docker top 7413692ee7a423413e80909000e1e94adc2c880016f32071c6ab9d47645092cf -eo pid,comm
[Pipeline] {
[Pipeline] stage
[Pipeline] { (check java)
[Pipeline] sh
process apparently never started in /var/jenkins_home/workspace/my-service@tmp/durable-25c4f40f
(running Jenkins temporarily with -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true might make the problem clearer)
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
$ docker stop --time=1 7413692ee7a423413e80909000e1e94adc2c880016f32071c6ab9d47645092cf
$ docker rm -f 7413692ee7a423413e80909000e1e94adc2c880016f32071c6ab9d47645092cf
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code -2
Finished: FAILURE
update 同一代码在我的另一台笔记本电脑(MAC运行Big Sur)中起作用。我看到的主要区别是Docker版本。 Big Sur Mac具有20.10.8版本,并且它不起作用的机器具有20.10.12的Docker版本。
另一个关键区别是从工作MAC的日志。它没有记录 Jenkins似乎没有在容器中运行
它说 Jenkins在容器中运行
。不确定它们是否在某种程度上是相关的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我让它处理以下说明:
看起来像是新的更新,我需要使用docker:dind容器来运行docker命令,并在上面的链接中使用提供的指令创建自己的dockerfile。
I got it working with the following instructions: https://www.jenkins.io/doc/book/installing/docker/
Looks like with the new updates, I need to use docker:dind container to run docker commands and create my own Dockerfile with the provided instructions in the link above.