【问题标题】:Run shell script inside ssh session inside Jenkinsfile在 Jenkinsfile 中的 ssh 会话中运行 shell 脚本
【发布时间】:2021-10-10 10:42:48
【问题描述】:

我正在尝试在 ssh 会话处于活动状态而不是单个命令时运行完整的脚本。

这是我当前的代码:

sh "ssh -tt -o StrictHostKeyChecking=no ubuntu@IPV4_DNS uptime"
sh "ssh -v ubuntu@IPV4_DNS docker pull X:${BUILD_NUMBER}"
sh "ssh -v ubuntu@IPV4_DNS docker rm -f test"
sh "ssh -v ubuntu@IPV4_DNS docker run --name=test -d -p 3000:3000X:${BUILD_NUMBER}"

想要的代码是这样的,但是下面的不起作用:*

sh "ssh -tt -o StrictHostKeyChecking=no ubuntu@IPV4_DNS uptime"
sh ''' ssh -v ubuntu@IPV4_DNS docker pull X:${BUILD_NUMBER}
       && docker rm -f test && docker run --name=test -d -p 3000:3000X:${BUILD_NUMBER} 
'''

【问题讨论】:

    标签: shell ssh jenkins-pipeline


    【解决方案1】:
    ssh something here && something else && another one
    

    ssh 会话中运行something here,并在本地运行something elseanother one。您想添加引号以将整个命令行传递给ssh

    sh "ssh -tt -o StrictHostKeyChecking=no ubuntu@IPV4_DNS uptime"
    sh """ssh -v ubuntu@IPV4_DNS 'docker pull X:${BUILD_NUMBER} &&
        docker rm -f test &&
        docker run --name=test -d -p "3000:3000X:${BUILD_NUMBER}"'
    """
    

    假设您希望 Jenkins 为您扩展 ${BUILD_NUMBER},我切换到了三重双引号而不是三重单引号。

    最初的问题是关于 Bash,但为了记录,你在这里运行 sh,而不是 Bash。如果您想在 Jenkinsfile 中使用 Bash 功能,您可以添加 shebang #!/usr/bin/env bash 或类似命令的第一行。但这在这里没有必要;所有这些命令都很简单且完全 POSIX。 (也许另见Difference between sh and bash

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      相关资源
      最近更新 更多