gpt4 book ai didi

docker - Jenkins 在容器内运行命令吗?

转载 作者:行者123 更新时间:2023-12-02 19:19:28 41 4
gpt4 key购买 nike

我想在 docker 容器内运行 Jenkins 管道,例如运行所有测试、进行声纳扫描等。

这就是我的管道的样子。

pipeline {  
agent {
docker {
image 'node:10-alpine'
args '-u root:root'
}
}

stages {
stage('Checkout') {
steps {
sh 'node --version; cat /proc/1/cgroup; touch /root/my_file'
checkout(...)
}
}
stage('Run Unit Tests') {
steps {
sh '''
npm install --unsafe-perm
'''
}
}
}
}

现在作为输出,我在控制台中看到以下日志
+ cat /proc/1/cgroup
...
2:freezer:/docker/eeea802143ce0f1b4047650956e58624a0c38a5fbc601f189755a381dcf9c271
1:name=systemd:/docker/eeea802143ce0f1b4047650956e58624a0c38a5fbc601f189755a381dcf9c271

这意味着该命令在 docker 容器中运行。另外,我可以看到 /root/my_file主机上不存在。

现在,进一步,我看到以下输出
+ npm install --unsafe-perm
> libpq@1.8.8 install /home/jenkins/mount-dir/workspace/test-docker-pipeline/api/node_modules/libpq
> node-gyp rebuild

现在,在这里我看到日志提到了主机上存在的目录。

我现在很困惑,我的管道在哪里执行,在容器内还是在 Jenkins 内部?如果有任何一种情况,为什么我会看到矛盾的日志语句?

最佳答案

您的所有命令都按照您的预期在容器内运行。所以一切都很好。

Jenkins 所做的是将 Workspace 文件夹绑定(bind)挂载到容器内的同一位置。如果您检查您的作业控制台输出,您应该会找到类似的内容:

Docker 1 does not seem to be running inside a container
$ docker run -t -d -u 1002:1002 -w /home/jenkins/build/workspace/<my-project> -v /home/jenkins/build/workspace/<my-project>:/home/jenkins/build/workspace/<my-project>:rw,z -v /home/jenkins/build/workspace/<my-project>@tmp:/home/jenkins/build/workspace/<my-project>@tmp:rw,z $ docker top 8948be0b380b033f20cd8c27647b88719b47a237f839513ebf66a9693b4c2975 -eo pid,comm
Running in /home/jenkins/build/workspace/<my-project>
-v选项是将您的工作区文件夹从您的主机绑定(bind)到正在运行的容器内的相同位置。有关 Docker 的 bind-mlunt 功能的更多信息,请参阅官方文档: https://docs.docker.com/storage/bind-mounts/

编辑:自 Pipeline 2.5 以来,Jenkins Pipeline 对 Docker 镜像具有原生支持。因此不再需要 Docker Pipeline Plugin。

关于docker - Jenkins 在容器内运行命令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60928664/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com