为什么Jenkins管道简单sh不断挂起

时间:2019-11-30 09:55:42

标签: docker jenkins jenkins-pipeline

我已经尝试以非超级用户身份运行构建器docker映像两天了,但是我遇到了各种各样的问题。我面临的最简单的问题是,如果我想运行此管道,我的jenkins构建将继续挂起:

node('') {
    stage ('test') {
        withDockerContainer(image: 'openjdk:8-jdk', args: '-u 1000', toolName: env.DOCKER_TOOL_NAME) {
            sh 'amir'
        }
    }
}

这是詹金斯的输出: The build keeps hanging

1 个答案:

答案 0 :(得分:0)

在对该问题进行了更多调查并通读了https://medium.com/@mccode/understanding-how-uid-and-gid-work-in-docker-containers-c37a01d01cf之后(总而言之,博客说的是uid和gid是重要的,而不是用户名),我决定更改我的方法,使其不使用'-u 1000',但未指定用户,而是使用与正在构建的詹金斯相同的uid和gid构建我的图像。 换句话说,现在我的管道是: 构建一个通过jenkins uid和gid传递的docker镜像,作为docker build param Dockerfile:

ARG UID=1000
ARG GID=1000

RUN groupadd -g ${GID} $RUNNER_USER
RUN useradd -u ${UID} -g ${GID} -ms /bin/bash $RUNNER_USER

我的jenkins管道docker构建部分:

docker.build("$dockerImage", '--build-arg UID=$(id -u) --build-arg GID=$(id -g) .')

在已构建的docker映像上运行构建:

withDockerContainer(image: dockerImage, args: '--net="host"', toolName: env.DOCKER_TOOL_NAME) {
    // do the build, e.x. sh "mvn clean package"
}