Jenkinsfile:连接到服务器并在服务器上执行操作

时间:2020-03-20 11:59:07

标签: jenkins docker-compose jenkins-pipeline jenkins-groovy

在Jenkinsfile中,我尝试登录到服务器,然后从那里运行docker-compose。但是,我收到一个AccessDeniedException错误。根用户有权访问服务器上的所有文件夹。

我假设我有一个思想上的错误:我怀疑在ssh到服务器后,dir命令不是在服务器中运行,而是在詹金斯运行的地方运行。

Jenkinsfile:

pipeline {
    agent any

    environment {
        PATH = "$PATH:/usr/local/bin/"
    }

    stages {

        stage('Deploy to digital ocean') {
            steps {
                sshagent(['my-private-ssh-key']) {

                    sh """
                            ssh root@host
                        """
                     dir("/var/www/car_prices"){
                        sh "docker-compose down"

                     }

                 }
            }

        }
    }
}

错误堆栈:

[Pipeline] dir
Running in /var/www/car_prices
[Pipeline] {
[Pipeline] sh
[Pipeline] }
[Pipeline] // dir
[Pipeline] }
$ ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 67144 killed;
[ssh-agent] Stopped.
[Pipeline] // sshagent
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
java.nio.file.AccessDeniedException: /var/www

问题: 1.为什么会引发错误?

1 个答案:

答案 0 :(得分:1)

您需要使用ssh为您完成这项工作,这很简单:

...
sshagent(['my-private-ssh-key']) {
    sh """
        ssh root@host "cd /var/www/car_prices; docker-compose down"
    """
}
...

这有点丑陋,但是可行。如果您愿意,可以将命令分成多行以提高可读性。如果您想提供一些更复杂的功能(例如错误处理),则此方法将变得更加棘手。

相关问题