使用 Jenkins 构建应用程序时通过 ssh 连接

Connecting via ssh when building app with Jenkins

请告诉我。

我正在使用 Jenkins 构建一个 运行 在 docker 容器中的项目,但我 运行 遇到了问题。

执行这段代码时:

stage('deploy front') {
    when { equals expected: 'do', actual: buildFront }
    agent {docker{image 'ebiwd/alpine-ssh'}}

    steps{
        sh 'chmod 400 .iac/privatekey'
        sh "ssh -i   .iac/privatekey ci_user@134.209.181.163"
    }
}

我收到一个错误:

+ ssh -i .iac/privatekey ci_user@134.209.181.163

Pseudo-terminal will not be allocated because stdin is not a terminal.

Warning: Permanently added '134.209.181.163' (ECDSA) to the list of known hosts.

bind: No such file or directory

unix_listener: cannot bind to path: /root/.ssh/sockets/ci_user@134.209.181.163-22.uzumQ42Zb6Tcr2E9

此外,如果您在容器中用手执行以下脚本,则一切正常

ssh -i   .iac/privatekey ci_user@134.209.181.163

Jenkins 容器以 docker-compose.yaml

开始
version: '3.1'
services:
  jenkins:
    image: jenkins/jenkins:2.277.1-lts
    container_name: jenkins
    hostname: jenkins
    restart: always
    user: root
    privileged: true

    ports:
      - 172.17.0.1:8070:8080
      - 50000:50000
    volumes:
      - /opt/docker/jenkins/home:/var/jenkins_home
      - /etc/timezone:/etc/timezone
      - /usr/bin/docker:/usr/bin/docker
      - /etc/localtime:/etc/localtime
      - /var/run/docker.sock:/var/run/docker.sock

可能是什么问题?

问题出在这个地方:

agent {docker{image 'ebiwd/alpine-ssh'}}

当我将其更改为以前的版本时,例如:

agent {docker{image 'ebiwd/alpine-ssh:3.13'}}

一切开始工作

我的 Gitlab 管道中有同样的错误:

bind: No such file or directory
unix_listener: cannot bind to path: /root/.ssh/sockets/aap_adm@wp-np2-26.ebi.ac.uk-22.LIXMnQy4cW5klzgB
lost connection

我认为错误与 this changeset 有关。

特别是,ssh 配置文件需要路径“~/.ssh/sockets”。由于我们没有使用脚本 /usr/local/bin/add-ssh-key(为该图像创建的自定义脚本),因此缺少此路径。

我在图像项目中打开了一个问题:Error using the image in CI/CD pipelines #10