在容器中使用 Jenkins 运行 在主机上构建 docker 文件

build docker file on host with Jenkins running in container

我正在尝试使用 Jenkins 管道构建 docker 图像,Jenkins 运行 在 Docker 容器中。

这是我的 Jenkins 文件:

   stage 'Deploy'
         dir('/apps/npt'){
            sh 'chmod +x deploy_prod.sh'
            sh 'cat deploy_prod.sh'
            sh './deploy_prod.sh'
         }

这是我启动容器的方式:

docker run --detach --publish 8080:8080 -u 0  --volume jenkins_volume:/var/jenkins_home  --volume apps:/apps --name jenkins jenkins/jenkins

这是 sh 文件:

#!/bin/bash
#build docker container
docker build -t npt .

这是我得到的错误:

./deploy_prod.sh: line 6: docker: command not found

我尝试将 docker 套接字作为卷添加到容器 -v /var/run/docker.sock:/var/run/docker.sock,但仍然出现同样的错误。

我在另一个项目上使用相同的配置,jenkins 运行 作为 VM 上的服务,没有问题...

您需要在 Jenkins docker 容器中添加 docker 客户端。查看 https://github.com/jenkinsci/docker/blob/master/README.md#installing-more-tools 了解如何做到这一点。您还可以使用 docker exec.

在容器中安装它

当脚本在容器内运行时,它会检查 PATH 变量以解析 docker 命令。 docker 客户端然后将指令写入 /var/run/docker.sock。 docker 服务器读取这些指令并相应地执行操作。

-v /var/run/docker.sock:/var/run/docker.sock -> 这意味着 docker 容器中的 docker 客户端可以与 docker 引擎(server/VM)运行 在主机上。