SH命令悬挂在Jenkins管道中

发布于 2025-02-07 11:53:43 字数 3169 浏览 1 评论 0 原文

我希望有人在这里为我提供一些指导:

我正在使用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在容器中运行。不确定它们是否在某种程度上是相关的。

I am hoping someone can provide me some guidance here:

I'm using jenkins (2.289.3) as a docker container to run some CI jobs in my macbook Monterey. Here is my docker command

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

I'm using Jenkinsfile to build a project. Below is the code:

#!/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"
            }
        }

    }
   
}

It fails at line sh "java -version" inside the open jdk container. Basically it hangs for a while and I get the below error code:

[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
The same code works in my another laptop (Mac running Big Sur). The main difference I see is the docker version. Big Sur mac has version 20.10.8 and the machine where it doesn't work has the docker version of 20.10.12.

The another key difference is the log from the working mac. Instead of logging Jenkins does not seem to be running inside a container it says Jenkins is running inside a container. Not sure if they both are related in some way.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

淡看悲欢离合 2025-02-14 11:53:43

我让它处理以下说明:

看起来像是新的更新,我需要使用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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文