Jenkins 按顺序执行 sshCommand

问题描述 投票:0回答:2

我正在尝试使用 SSHCommand 使用 Pipeline 执行多个命令,但我无法执行我想要的操作:

pipeline {
   agent any

   stages {
      stage('Generate File') {
         steps {
           script {
             def remote = [:]
             remote.name = 'test'
             remote.host = 'xxxxxxx'
             remote.user = 'xxxxxxx'
             remote.port = xxxxxxxx
             remote.password = 'xxxxxxxx'
             remote.allowAnyHosts = true
             sshCommand remote: remote, command: "cd /var/my/directory"
             sshCommand remote: remote, command: "touch pipeline"
           }
         } 
      }
   }
}

但是文件“pipeline”是在“/home/myUser”中创建的,而不是在/var/my/directory中创建的

我该怎么做?我需要使用“&&”?

这有效:

sshCommand remote: remote, command: "cd /var/my/directory && touch MyFile"

但我不喜欢“单行”

谢谢,

jenkins-pipeline
2个回答
2
投票

基本上发生的是,每次调用 sshCommand 都会启动自己的 shell(非常类似于您在计算机上打开两个不同的终端)。命令执行后,shell 再次关闭。

所以你的代码是这样的:

  1. 打开远程 shell(在主目录中)
  2. 进入目录/var/my/directory”
  3. 关闭外壳
  4. 开始一个新的(在主目录中)
  5. 触摸管道

解决这个问题的一种方法是单个命令

touch /var/my/directory/pipeline
或者像你说的
&&
。如果你想把它放在多行中,你可以使用
\

sshCommand remote: remote, command: "cd /var/my/directory \
                                      && touch pipeline"

0
投票

您也可以使用这种方式进行多行

sshCommand remote: remote, command: '''
     cd /var/my/directory 
     touch pipeline


'''
© www.soinside.com 2019 - 2024. All rights reserved.