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

时间:2015-11-24 14:44:04

标签: jenkins ssh

我们刚刚开始使用Jenkins的CI - 所以我们肯定会在新手阶段。这就是我们要做的事情:

我们正在使用Publish Over SSH Jenkins插件将构建工件传输到目标服务器并传输到特定的根文件夹 - 让我们将其称为/ var / mycompany / myapp,这就是问题发生的地方。

我们已将Publish Over SSH插件配置为使用密钥以建立与目标服务器的连接。在Manage Jenkins>配置系统> SSH Servers部分我们还配置了目标ssh服务器(名称/主机名/用户名/远程文件夹等)。测试时连接成功。

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

  

SSH:从主机连接[myjenkins] SSH:正在连接   配置[stage-tester] ... SSH:创建会话:用户名   [myusername],hostname [x.x.x.x],port [22] SSH:连接会话   ... SSH:连接SSH:打开SFTP通道... SSH:SFTP通道   打开SSH:连接SFTP通道... SSH:连接SSH:cd [/] SSH:   OK SSH:cd [var] SSH:OK SSH:cd [mycompany] SSH:OK SSH:mkdir   [myapp] SSH:FAILED:消息[Permission denied]

首先,这对我们有意义,因为密钥是由特定用户创建的,该用户不是目标Linux / Fedora服务器上的sudoer。因此,我们让用户成为一个sudoer组的成员,期望这可以解决问题。它还没有修复这个问题 - 我们继续拒绝"许可被拒绝"错误。那么问题是我们如何获取用户/密钥的服务器根目录?

任何建议表示赞赏。 谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

  2. 将/var/lib/jenkins/.ssh中的密钥对(从步骤1)chown到“jenkins”用户,以便步骤3中的Jenkins ssh服务器配置可以读取密钥

  3. 在Jenkins中设置SSH服务器引用:在Manage Jenkins>下;配置系统> SSH服务器>添加了指向我的目标部署服务器的新ssh服务器ref,使用'jenkins'用户名和新密钥的路径(/var/lib/jenkins/.ssh/jenkins-chef)。此外,我们希望从目标服务器的根(/)文件夹发布到一个文件夹,结果我们将“远程目录”指定为“/”(根)

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

    • 源文件:** / *
    • exec命令:sudo chef-client
    • 远程目录:var / my-apps / my-app
  6. 注意:如果我尝试使用初始根斜杠(/ var / my-apps / my-app)指定远程目录,则会将其复制到Jenkins用户的主文件夹,然后只创建指定的文件夹结构。这就是为什么在步骤3中指定'/'很重要。

    这是詹金斯方面的。但是,当我第一次尝试运行时,我收到了这个错误:

      

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

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

      

    jenkins ALL =(ALL)NOPASSWD:ALL

    一旦完成,一切都按预期工作。

答案 1 :(得分:0)

在使用Linux计算机时,您可以尝试使用SCP Plugin

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

enter image description here

您可以使用jenkins public ssh密钥来管理身份验证或用户/密码。

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

enter image description here