gpt4 book ai didi

docker - Jenkins:从与代理(另一个 Docker 容器)一起运行的阶段连接到 Docker 容器

转载 作者:行者123 更新时间:2023-12-01 13:13:46 24 4
gpt4 key购买 nike

我正在改造管道以使用声明式管道方法,以便我能够 to use Docker images在每个阶段。

目前我有以下工作代码,它执行连接到在 Docker 容器中运行的数据库的集成测试。

node {
// checkout, build, test stages...
stage('Integration Tests') {
docker.image('mongo:3.4').withRun(' -p 27017:27017') { c ->
sh "./gradlew integrationTest"
}
}

现在使用声明式管道,相同的代码看起来像这样:
pipeline {
agent none
stages {
// checkout, build, test stages...
stage('Integration Test') {
agent { docker { image 'openjdk:11.0.4-jdk-stretch' } }
steps {
script {
docker.image('mongo:3.4').withRun(' -p 27017:27017') { c ->
sh "./gradlew integrationTest"
}
}
}
}
}
}

问题:该阶段现在在 Docker 容器内运行并运行 docker.image()导致 docker: not found阶段中的错误(它正在现在使用的 openjdk 图像中寻找 docker)。

问题:如何启动数据库容器并从声明性管道的阶段连接到它?

最佳答案

本质上您正在尝试使用的是 DIND。

您正在使用 jenkins slave,它基本上是使用 docker agent { docker { image 'openjdk:11.0.4-jdk-stretch' } } 创建的

容器运行后,您将尝试执行 docker 命令。错误 docker: not found有效,因为没有安装 docker cli。您需要更新 dockerfile/创建一个安装了 openjdk:11.0.4-jdk-stretch 和 docker dameon 的自定义镜像。

安装守护程序后,您需要批量挂载/var/run/docker.sock 以便守护程序将通过套接字与主机 docker 守护程序通信。

用户应该是 root 或特权用户,以避免出现权限被拒绝的问题。

关于docker - Jenkins:从与代理(另一个 Docker 容器)一起运行的阶段连接到 Docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57785359/

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