1

我是一个新手,有这个 CI/CD 容器的东西,所以请在我错的地方纠正我。
我似乎无法找到如何通过在我的 jenkins 实例(工作区)上创建的 npm 构建文件发送到远程服务器。我有一个管道可以成功引入我的 github 存储库,完成我所有有趣的 npm 工作(npm 安装、测试、构建)。我在我的 jenkins 实例 /workspace 中看到了我的构建目录。
我的环境如下。我们有一个安装了 docker(带有 Portainer)的服务器。詹金斯在一个安装了卷的容器中运行(我的反应构建目录在这里)。管道或构建等没有问题。我只是不知道如何将我的工件从我的詹金斯工作区目录推送到我的“远程”开发服务器。

我可以使用我的远程服务器凭据(但需要密码)在我的 jenkins 容器中成功打开控制台(作为 jenkins 用户的端口)和工作区目录中的 scp 文件。

我安装并使用了“通过 SSH 发布”Jenkins 插件,并从我的设置中获得了成功的“测试配置”。
我在远程机器上创建了我的 RSA 密钥(我试图将我的构建文件推送到)。然后,我将私钥(在没有密码的情况下创建)粘贴到插件的“使用密码身份验证,或使用不同的密钥”部分。同样,我获得了成功的测试连接。

在我的管道中,最后一步是部署,我使用这个命令

sh 'scp -r build myusername@xx.xx.xx.xx:/var/files/react-tester'

我收到“权限被拒绝(公钥、密码)”。错误。我没有与 rsa 密钥关联的密码。我尝试了两种方法,在远程机器上创建 rsa 密钥作为我的远程用户,将 jenkins 机器作为 jenkins 用户。我已经阅读了人们以两种方式创建密钥的示例,但不确定创建密钥并粘贴到“通过 SSH 发布”插件的哪个部分的用户/机器组合。
我没主意了。

4

1 回答 1

0

首先,转到“Manage Jenkins”>“Credentials”,添加类型为“SSH Username with private key”的新 SSH credential,并填写“Username”和您的私钥(如果您还没有完成,请生成一个)字段(您也可以上传一个)。不要忘记您必须将生成的公钥复制到${SSH_USERNAME}/.ssh/authorized_keys远程服务器上的文件中。

我假设您在这里使用脚本或 DSL 管道。在您的代码中,构建应用程序后,您可以将其推送到您的服务器,将此步骤添加到您的管道中:

pipeline {

    stages {
        stage("Pushing changes to remote server") {
            steps {
                script {
                    def remote_server = "1.2.3.4"
                    withCredentials([sshUserPrivateKey(credentialsId: 'my-key', keyFileVariable: 'SSH_KEY', passphraseVariable: '', usernameVariable: 'SSH_USERNAME')]) {
                        sh "scp -i \${SSH_KEY} build/ ${SSH_USERNAME}@${remote_server}:/var/files/react-tester/"
                    }
                }
            }
        }
    }

}

此致。

于 2021-04-01T21:06:27.223 回答