gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:21:03 25 4
gpt4 key购买 nike

我们刚刚从 Jenkins 开始进行 CI - 所以我们肯定处于新手阶段。这是我们正在尝试做的事情:

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

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

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

SSH: Connecting from host [myjenkins] SSH: Connecting with configuration [stage-tester] ... SSH: Creating session: username [myusername], hostname [x.x.x.x], port [22] SSH: Connecting session ... SSH: Connected SSH: Opening SFTP channel ... SSH: SFTP channel open SSH: Connecting SFTP channel ... SSH: Connected SSH: cd [/] SSH: OK SSH: cd [var] SSH: OK SSH: cd [mycompany] SSH: OK SSH: mkdir [myapp] SSH: FAILED: Message [Permission denied]



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

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

最佳答案

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

  • 使用说明找到 here我在/var/lib/jenkins/.ssh 文件夹中设置了一个“jenkins-chef”ssh key 对,并将公钥传输到我的目标部署服务器上的 jenkins 用户的授权 key 文件。
  • 将/var/lib/jenkins/.ssh 中的 key 对(从第 1 步开始)传给“jenkins”用户,以便第 3 步中的 Jenkins ssh 服务器配置可以读取 key
  • 在 Jenkins 中设置 SSH 服务器引用:在管理 Jenkins > 配置系统 > SSH 服务器 > 添加新的 ssh 服务器引用,使用“jenkins”用户名和新 key 路径(/var/lib/jenkins/)指向我的目标部署服务器.ssh/ Jenkins 厨师)。此外,我们希望发布到目标服务器根 (/) 文件夹之外的文件夹,结果证明将“远程目录”指定为“/”(根)
  • 很重要。
  • 在我的 Jenkins 工作中,我使用“通过 ssh 发送文件或执行命令”插件添加了一个新的构建步骤。我将其配置为使用我在步骤 3 中定义的 ssh 服务器:
  • 源文件:**/*
  • 执行命令:sudo chef-client
  • 远程目录:var/my-apps/my-app

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

    Jenkins 方面就是这样。但是,当我第一次尝试运行它时,我得到了这个错误:

    SSH: EXEC: STDOUT/STDERR from command [sudo chef-client] ... sudo: no tty present and no askpass program specified



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

    jenkins ALL=(ALL) NOPASSWD:ALL



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

    关于Jenkins - 无法将构建工件复制到目标机器上所需的根文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33896567/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com