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

Jenkinsfile:连接到服务器并在服务器上执行操作,jenkins,docker-compose,jenkins-pipeline,jenkins-groovy,Jenkins,Docker Compose,Jenkins Pipeline,Jenkins Groovy,在Jenkins文件中,我试图登录到服务器,并从那里运行docker compose。但是,我收到一个AccessDeniedException错误。Root用户拥有服务器上所有文件夹的权限 我假设我有一个思考错误:我怀疑在ssh到服务器之后,dir命令不是在服务器中运行,而是在运行jenkins的地方运行 詹金斯档案: pipeline { agent any environment { PATH = "$PATH:/usr/local/bin/" }

在Jenkins文件中,我试图登录到服务器,并从那里运行docker compose。但是,我收到一个
AccessDeniedException
错误。Root用户拥有服务器上所有文件夹的权限

我假设我有一个思考错误:我怀疑在ssh到服务器之后,
dir
命令不是在服务器中运行,而是在运行jenkins的地方运行

詹金斯档案:

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.为什么它会抛出错误?

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

。。。
sshagent(['my-private-ssh-key']){
嘘
sshroot@host“cd/var/www/car_prices;docker compose down”
"""
}
...

这有点难看,但很管用。如果需要,可以将命令拆分为多行,以提高可读性。如果你想提供一些更复杂的功能,比如错误处理,这种方法会变得更加棘手。

你的怀疑是正确的,Jenkins master上运行了
dir
步骤。@zett42做我想要完成的事情的最佳方法是什么?那么什么方法不难看呢?我不知道是否有。我是这样做的上面,它为我工作。如果命令在从机上执行(所以如果您的主机是从机),看起来会更好,但这并不总是一个选项。