无法从jenkins管道在docker内部运行python脚本

时间:2019-02-22 19:03:17

标签: python docker jenkins jenkins-pipeline ros

我创建了一个python软件包(用于自动化jenkins中的构建阶段),可以使用pip进行安装。我还创建了一个dockerfile,它将从github克隆python包,执行pip安装并导出容器中安装了可执行文件(入口点,但是您想调用它)的路径(例如:〜/ .local / bin)。这就是我的dockerfile的样子。

FROM ros:melodic-ros-core-stretch
RUN apt-get update && apt-get -y install python-pip
RUN git clone <private-repo-with-personal-access-token>
RUN pip install <package-name>
RUN export PATH=~/.local/bin:$PATH 

因此,我构建了此映像,运行了容器,并输入了可打印世界的可执行文件(入口点)之一。工作完美。对此没有任何问题。总的来说,我想在jenkins管道中调用此可执行文件(入口点)。我最初对此有问题,然后我了解到在使用docker映像进行设置时,jenkins管道在容器顶部运行,但是使用为jenkins分配的工作空间,该工作空间为/ var / lib / jenkins / workspace。这就是我的jenkins管道脚本的样子

pipeline {
    agent {
         docker {
              args '--network host -u root:root'
              image '<private-docker-hub-image>'
              registryCredentialsId 'docker-credentials'
              registryUrl 'https://registry.hub.docker.com'
         }
    }
    stages {
        stage('Test') {
            steps {
                sh 'test-build'
            }
        }
    }
}

这是我遇到的错误。

Started by user Automated Build Environment
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/First_item
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] withDockerRegistry
$ docker login -u <docker username> -p ******** https://registry.hub.docker.com
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /var/lib/jenkins/workspace/First_item@tmp/251189be-62eb-4134-84ca-d70190ab080f/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[Pipeline] {
[Pipeline] sh
+ docker inspect -f . <private-dockerhub-image>

Error: No such object: <private-dockerhub-image>
[Pipeline] sh
+ docker inspect -f . registry.hub.docker.com/<private-dockerhub-image>
.
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 125:130 --network host -u root:root -v /var/lib/jenkins:/var/lib/jenkins -w /var/lib/jenkins/workspace/First_item -v /var/lib/jenkins/workspace/First_item:/var/lib/jenkins/workspace/First_item:rw,z -v /var/lib/jenkins/workspace/First_item@tmp:/var/lib/jenkins/workspace/First_item@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 ******** registry.hub.docker.com/<private-dockerhub-image> cat
$ docker top ab1f2ec9b503f9b916ee96943dc849acc90716f7543b4841ff3901b7a65aea54 -eo pid,comm
[Pipeline] {
[Pipeline] stage (hide)
[Pipeline] { (Test)
[Pipeline] sh
+ test-build
/var/lib/jenkins/workspace/First_item@tmp/durable-7cb108f7/script.sh: 1: /var/lib/jenkins/workspace/First_item@tmp/durable-7cb108f7/script.sh: test-build: not found
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
$ docker stop --time=1 ab1f2ec9b503f9b916ee96943dc849acc90716f7543b4841ff3901b7a65aea54
$ docker rm -f ab1f2ec9b503f9b916ee96943dc849acc90716f7543b4841ff3901b7a65aea54
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // withDockerRegistry
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 127
Finished: FAILURE

我的问题是rosdep,bloom-generate和其他几个脚本(足以知道这些脚本是作为机器人操作系统的〜/ .local / bin中另一个pip软件包的一部分安装的脚本)在管道中如何工作,但是而不是我通过pip安装的脚本。我真的很感谢任何帮助我指出我所缺少的内容。

谢谢。非常感谢。

1 个答案:

答案 0 :(得分:1)

对不起。解决方案非常简单。我犯的错误是我更新了dockerfile并创建了一个新映像,将其推送到dockerhub,但是在Jenkins master正在运行的实例中忘记修剪和更新了最新副本。所以基本上我的dockerhub只能说版本。 101以及我创建dockerfile和docker image的本地计算机的版本。 101.但詹金斯大师掌握了52节。因此,即使我进行了更改,更新的图像也没有被Jenkins大师掌握并繁荣发展!我这是一个愚蠢的错误。我感谢你们每一个人在这里帮助我。和平!!

相关问题