Jenkins-无法将生成工件复制到目标计算机上所需的根文件夹

Jenkins-无法将生成工件复制到目标计算机上所需的根文件夹,jenkins,ssh,Jenkins,Ssh,我们刚从詹金斯开始做CI,所以我们肯定处于新手阶段。以下是我们正在尝试做的: 我们正在使用Publish-Over-SSH-Jenkins插件将构建构件传输到目标服务器,并传输到特定的根文件夹中——我们将其命名为/var/mycompany/myapp,这就是问题所在 我们已经将PublishOverSSH插件配置为使用密钥来连接到目标服务器。在managejenkins>configuresystem>SSH服务器部分,我们还配置了目标SSH服务器(名称/主机名/用户名/远程文件夹等)。测试时

我们刚从詹金斯开始做CI,所以我们肯定处于新手阶段。以下是我们正在尝试做的:

我们正在使用Publish-Over-SSH-Jenkins插件将构建构件传输到目标服务器,并传输到特定的根文件夹中——我们将其命名为/var/mycompany/myapp,这就是问题所在

我们已经将PublishOverSSH插件配置为使用密钥来连接到目标服务器。在managejenkins>configuresystem>SSH服务器部分,我们还配置了目标SSH服务器(名称/主机名/用户名/远程文件夹等)。测试时连接成功

构建作业已配置为“通过SSH发送工件”,作为构建后操作。现在,只要我将文件发送到目标服务器上用户的主文件夹位置(即它将创建必要的~/var/mycompany/mayapp文件夹结构并传输所有文件),就可以正常工作。但是-如果我将“通过SSH发布”配置更改为使用“/”的远程目录,作业将失败,并出现以下错误:

SSH:从主机连接[myjenkins]SSH:与连接 配置[阶段测试仪]。。。SSH:创建会话:用户名 [myusername],主机名[x.x.x.x],端口[22]SSH:连接会话 ... SSH:已连接SSH:正在打开SFTP通道。。。SSH:SFTP通道 打开SSH:正在连接SFTP通道。。。SSH:Connected SSH:cd[/]SSH: OK-SSH:cd[var]SSH:OK-SSH:cd[mycompany]SSH:OK-SSH:mkdir [myapp]SSH:失败:消息[权限被拒绝]

起初,这对我们来说是有意义的,因为密钥是由目标Linux/Fedora服务器上不是sudoer的特定用户创建的。因此,我们让用户成为sudoer组的成员,希望这能解决问题。它还没有解决这个问题-我们继续得到“权限被拒绝”错误。所以问题是我们如何为我们的用户/密钥获得对服务器根目录的访问权

任何建议都将不胜感激。
谢谢

在使用Linux机器时,您可以尝试使用

在全局配置中,您只需像这样定义目标服务器:

您可以使用jenkins公钥来管理身份验证或用户/pwd

接下来,在Jenkins作业中,您可以创建一个构建后任务来复制服务器上的相关工件:


最后,这是我使用的解决方案:

  • 根据找到的说明,我在/var/lib/jenkins/.ssh文件夹中设置了一个“jenkins chef”ssh密钥对,并将公钥传输到目标部署服务器上jenkins用户的authorizedkeys文件

  • 将/var/lib/jenkins/.ssh(步骤1)中的密钥对发送给“jenkins”用户,以便步骤3中的jenkins ssh服务器配置可以读取密钥

  • 在Jenkins中设置SSH服务器引用:在“管理Jenkins>配置系统>SSH服务器>添加新的SSH服务器引用”下,使用“Jenkins”用户名和新密钥的路径(/var/lib/Jenkins/.SSH/Jenkins chef)指向我的目标部署服务器。此外,我们还希望发布到目标服务器根(/)文件夹之外的文件夹中,结果证明,将“远程目录”指定为“/”(根)非常重要

  • 在Jenkins的工作中,我使用“通过ssh发送文件或执行命令”插件添加了一个新的构建步骤。我将其配置为使用我在步骤3中定义的ssh服务器:

    • 源文件:**/*
    • exec命令:sudo chef客户端
    • 远程目录:var/my apps/my app
  • 注意:如果我试图用初始根斜杠(/var/my apps/my apps)指定远程目录,它将复制到Jenkins用户的主文件夹,并简单地创建指定的文件夹结构。这就是为什么在步骤3中指定“/”很重要的原因

    詹金斯那边就是这样。但是,我第一次尝试运行此操作时,出现以下错误:

    SSH:EXEC:STDOUT/STDERR来自命令[sudo chef client]。。。苏多:没有 tty存在且未指定askpass程序

    这是因为我试图运行“sudo”,它在目标服务器上发出密码挑战。为了避免这种情况,我使用“visudo”命令对目标服务器上的sudoers文件进行了以下更改:在文件底部,我添加了这一行,以便jenkins用户能够在不提示输入密码的情况下运行sudo:

    詹金斯全部=(全部)不全部


    一旦完成了,一切都如期进行

    谢谢布鲁诺,我试试这个。在您描述的场景中,将Jenkins的id_rsa.pub传输到目标机器并将其添加到.ssh/authorized keys中是一件简单的事情吗?确切的!)(如果我的解决方案可行,请不要忘记投票并接受)