是否可以从正在运行的Jenkins Docker Container中创建和运行Docker containers for CI/CD?因此,基本上可以从运行的容器中访问主机服务器上的Docker。
在我的主机服务器(Ubuntu 19.04)上安装了Docker (Docker版本19.03.3)。通过运行以下命令,我创建了一个Jenkins Container,将权限授予Docker (所以我想):
mkdir /home/myuser/Desktop/jenkins_home
docker run -dit --name jenkins -v /home/myuser/Desktop/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 jenkins/jenkins:lts在Jenkins中,我创建了一个管道,它从Git加载一个Jenkinsfile,如下所示:
pipeline {
agent {
docker {
image 'ubuntu:19.04'
args '-u root:sudo -p 3000:3000'
}
}
stages {
stage('Install') {
steps {
sh 'apt-get update'
sh 'apt-get install -y curl'
sh 'curl -sL https://deb.nodesource.com/setup_13.x | sh -'
sh 'curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -'
sh 'echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list'
sh 'apt-get update'
sh 'apt-get install -y nodejs yarn'
}
}
stage('Build') {
steps {
sh './build.sh'
}
}
}
}当我运行管道时,当我试图指示Docker拉取ubuntu:19.04 Docker镜像时,它崩溃了。错误是docker: not found。
我的Jenkins Container和主机Docker访问文件之间的某个连接配置错误。要在主机服务器上从Docker Container中运行Docker命令,需要进行什么配置?
发布于 2020-06-08 02:27:10
如果您想要从Jenkins容器创建和运行Docker containers for CI/CD,可以通过在Jenkins作业上创建shell命令来实现,该命令在Docker主机上运行ssh命令。
这需要在Docker主机上授权Jenkins容器ssh公钥,所以在Docker主机上应该有authorized_keys文件。要在Jenkins容器中使用相同的ssh密钥,可以在Jenkins容器上使用绑定挂载和ssh密钥。使用docker-compose的示例:
volumes:
- /home/user/.ssh/id_rsa:/var/jenkins_home/.ssh/id_rsa
- /home/user/.ssh/id_rsa.pub:/var/jenkins_home/.ssh/id_rsa.pub这是一个shell命令的示例内容,用于从Jenkins作业启动和更新Docker主机上的容器:
cat ./target/stack/installer-*.tar | ssh root@${DOCKER_HOST} \
/home/user/Build-Server/remote-installer.sh在上面的命令中,在Docker主机上启动了一个安装程序。因此,在Docker主机上部署/更新了新的容器。remote-installer.sh脚本从标准输入接收文件,并使用tar命令将其解压缩。
TEMPDIR=`mktemp -d`
echo "unarchiving to $TEMPDIR"
tar xv -C "$TEMPDIR"
...这适用于将Docker容器与Jenkins容器放在同一服务器上或将Docker容器和Jenkins容器放在不同服务器上的两种情况。
https://stackoverflow.com/questions/58961848
复制相似问题