2

我正在尝试在 Ubuntu 16.04 服务器上使用 Jenkins设置持续部署Hugo站点。我已经按照他们网站上的建议使用snap安装了 hugo。我已经能够让该站点在我的主用户帐户上运行,但是当我尝试让 Jenkins 执行此操作时,它会遇到此错误:

cannot create user data directory: /var/lib/jenkins/snap/hugo/1766: Permission denied

这似乎有点奇怪,因为如果我正确读取权限,Jenkins 对该文件夹具有写入权限:

jenkins@computer: ~$ ls -al /var/lib/jenkins/snap/hugo/1766
total 8
drwxr-xr-x 2 jenkins jenkins 4096 May 11 01:33 .
drwxr-xr-x 4 jenkins jenkins 4096 May 11 01:33 ..

我在这里错过了什么吗?我还需要做其他事情吗?

4

2 回答 2

1

我最终通过以下方式解决了这个问题:

  • 卸载詹金斯sudo apt-get remove --purge jenkins
  • 创建一个名为的标准用户帐户jenkins
  • 重新安装詹金斯和
  • 将 Jenkins 工作区根目录设置为/home/jenkins/workspace/${ITEM_FULL_NAME}

也可以通过创建一个/home/jenkins由 Jenkins 配置文件拥有的目录来解决

于 2018-05-12T23:31:18.807 回答
1

当我试图让詹金斯去做时

确保 Jenkins 作业实际运行为jenkins:在您的作业中添加一个步骤以进行打印id -a
机会是:它不是作为 Jenkins 运行,而是作为您的主帐户运行,它无权在该文件夹中写入。


“无法创建用户数据目录”:可能 1766 是作为用户创建的用户帐户的 id。检查使用 chmod 777 (用于测试)
创建(作为您的主帐户)该文件夹是否有帮助。1766

注意hugo 问题 3143确实提到:

为了安全起见,快照是只读的。我们希望防止敌对方偷偷更改您计算机上的软件,因此您无法修改系统上安装的快照。这也意味着您可以随时检查 snap 上的签名,即使在安装很久之后,以确保它仍然是您想要的软件。如果要修改快照,通常可以构建自己的版本,特别是如果它是开源的。

那么快照可以在哪里写入数据呢?每个快照都有自己的一组具有特定属性的可写目录。快照可以独立于用户写入两个目录。其中之一是版本化的 - 每次升级快照时都会保存数据,并且新的快照修订可以升级其副本。另一个“通用”数据目录没有版本控制,用于存储您不想在快照修订版中复制的大块数据:

/var/snap/<name>/current/  ← $SNAP_DATA is the versioned snap data directory
/var/snap/<name>/common/   ← $SNAP_COMMON will not be versioned on upgrades

通常,配置与快照的系统范围数据一起存储在其中之一中。

用户主目录中的每个快照还有等效的两个可写目录,可用于分别存储特定于一个用户或另一个用户的快照数据:

~/snap/<name>/current/      ← $SNAP_USER_DATA that can be rolled back
~/snap/<name>/common/       ← $SNAP_USER_COMMON unversioned user-specific data

您可以使用 Hugo 的 snap 版本在您的目录中的任何位置写入(即运行hugo new site等) ,例如,但不能在系统范围的目录中。$HOME~/tmp/htest/tmp

这与“Hugo Install from snap”部分相匹配:

由于 Snaps 的限制和安全模型,Hugo-as-a-snap 只能在用户的 $HOME 目录和用户拥有的 gvfs 挂载目录中写入

sudo snap install hugo --classic如果您希望hugo能够在除用户$HOME目录之外的其他路径中具有写访问权限,则用于禁用默认安全模型。

于 2018-05-11T05:02:11.290 回答