【发布时间】:2021-11-07 07:30:25
【问题描述】:
我们希望使用 Jenkins Pipelines 在安装了 Docker 但不会(也不会)通过端口 2376 公开 Docker 套接字的远程主机上使用 AWS ECR 映像。
几个更简单的选项包括:
- 使用现有的 Jenkins SSH/脚本
- 使用管道 ssh-agent 并在其中内联运行命令
但是,由于声明式 docker 插件似乎拥有所需的一切,因此使用它会更干净,因为标签等都将与管道的其他部分对齐。
互联网上的所有例子展示
docker.withServer("tcp://X:2376","credentialsId") {...}
但是,从配置 Jenkins Cloud Config -> Docker Templates 开始,似乎提供了 ssh,所以我们尝试了以下操作:
stages {
stage('Deploy to Remote Host') {
steps {
script {
docker.withServer("ssh://ec2-x-x-x-x.mars-1.compute.amazonaws.com:22", "ssh-credentials-id") {
docker.withRegistry("https://1234567890.dkr.ecr.mars-1.amazonaws.com", "ecr:mars-1:ecr-credentials-id") {
docker.pull('my-image:latest')
}
}
}
}
}
}
不幸的是,我们收到以下连接错误:
error during connect: Post http://docker/v1.40/auth: command [ssh -p 22 ec2-x-x-x-x.mars-1.compute.amazonaws.com -- docker system dial-stdio] has exited with exit status 255, please make sure the URL is valid, and Docker 18.09 or later is installed on the remote host: stderr=Host key verification failed.
我们在服务器上有 Docker v19,使用 ssh-agent 的 ssh 密钥就可以了。
关于我们需要做些什么来使其正常工作有什么想法吗?
【问题讨论】:
-
有什么问题 - 在容器内运行管道或连接到 ecr?
-
通过 ssh 连接到(远程)EC2 实例以运行“docker stop”、docker pull 和“docker run”命令(即部署应用程序更新)。
标签: docker jenkins jenkins-pipeline pipeline cloudbees