我应该使用 build 用户还是 jenkins 用户来构建项目?即谁应该拥有詹金斯的构建工件?
Should I use a build user or jenkins user for building projects? ie who should own the build artifacts in jenkins?
在 jenkins 中构建大型项目的标准是什么(例如,80Gig 的依赖作业从一个 repo 构建库和二进制文件)?
如果您将这个大型构建拆分为构建库的作业和构建下游应用程序的其他作业,您应该使用 jenkins 用户来构建项目,还是设置单独的构建用户来构建项目?
如果您使用 SSH 外包给远程代理会怎样?
默认情况下不允许 jenkins 用户远程访问另一台主机,因为 /bin/false
这里:
$ grep jenkins /etc/passwd
jenkins:x:996:992:Jenkins Automation Server:/var/lib/jenkins:/bin/false
这是否意味着作为构建用户的所有服务器场作业 运行 还是您应该将此设置更改为 /bin/sh
以作为 jenkins 用户完成 ssh 会话?或者仅使用设置 JNLP 代理?
如果您在 jenkins master 上构建库,.o 和二进制文件是否应该作为 jenkins 拥有?
如果您在专用的 jenkins master 上构建,执行者是否应该设置为使用构建用户而不是 jenkins 用户的代理?
如果使用 NFS 类型装载来共享构建工件,那看起来如何?
与前两个问题相关——所有本地作业都将在 jenkins 用户下建立所有权。那么这是否意味着您使用构建用户并将远程节点作为构建用户使用到本地主机,只是为了让所有工件都具有相同的用户供所有本地和远程代理使用?
这些问题听起来可能很愚蠢,但我找不到任何关于谁应该是构建所有者或以理智的方式构建非常大的单个 git 回购项目的最佳实践的指南(由于静态链接,repo 所有者不想将代码拆分到不同的 repos 中).
根据我们的经验(非常大的 monorepo,250 多个从属):
我们将几个作业合并为一个大作业,在适用的情况下使用并行阶段,因此可以同时在不同的从机上构建独立的东西(以节省时间)。因此,更容易了解失败的原因和原因,并且所有工件都集中在一个地方,并且有一个 Jenkinsfile
可以跟踪。
我们所有的奴隶都设置为 JLNP,当他们重新启动时,他们会启动 jenkins-agent。我们的奴隶上没有 jenkins
用户。
因为你应该选择所有的工件并最终存档它们,最好将奴隶清理到零状态,谁拥有它并不重要,你总是可以用 chown
.
NFS 在我们这里不是一个好主意,因为它会受到网络和磁盘使用的严重限制。我们为 docker 图像使用 Docker 注册表,但如果您不使用 Docker,Artifactory 可能会起作用。 minio 是另一种选择。
在 jenkins 中构建大型项目的标准是什么(例如,80Gig 的依赖作业从一个 repo 构建库和二进制文件)?
如果您将这个大型构建拆分为构建库的作业和构建下游应用程序的其他作业,您应该使用 jenkins 用户来构建项目,还是设置单独的构建用户来构建项目?
如果您使用 SSH 外包给远程代理会怎样?
默认情况下不允许 jenkins 用户远程访问另一台主机,因为 /bin/false
这里:
$ grep jenkins /etc/passwd
jenkins:x:996:992:Jenkins Automation Server:/var/lib/jenkins:/bin/false
这是否意味着作为构建用户的所有服务器场作业 运行 还是您应该将此设置更改为 /bin/sh
以作为 jenkins 用户完成 ssh 会话?或者仅使用设置 JNLP 代理?
如果您在 jenkins master 上构建库,.o 和二进制文件是否应该作为 jenkins 拥有?
如果您在专用的 jenkins master 上构建,执行者是否应该设置为使用构建用户而不是 jenkins 用户的代理?
如果使用 NFS 类型装载来共享构建工件,那看起来如何?
与前两个问题相关——所有本地作业都将在 jenkins 用户下建立所有权。那么这是否意味着您使用构建用户并将远程节点作为构建用户使用到本地主机,只是为了让所有工件都具有相同的用户供所有本地和远程代理使用?
这些问题听起来可能很愚蠢,但我找不到任何关于谁应该是构建所有者或以理智的方式构建非常大的单个 git 回购项目的最佳实践的指南(由于静态链接,repo 所有者不想将代码拆分到不同的 repos 中).
根据我们的经验(非常大的 monorepo,250 多个从属):
我们将几个作业合并为一个大作业,在适用的情况下使用并行阶段,因此可以同时在不同的从机上构建独立的东西(以节省时间)。因此,更容易了解失败的原因和原因,并且所有工件都集中在一个地方,并且有一个
Jenkinsfile
可以跟踪。我们所有的奴隶都设置为 JLNP,当他们重新启动时,他们会启动 jenkins-agent。我们的奴隶上没有
jenkins
用户。因为你应该选择所有的工件并最终存档它们,最好将奴隶清理到零状态,谁拥有它并不重要,你总是可以用
chown
.NFS 在我们这里不是一个好主意,因为它会受到网络和磁盘使用的严重限制。我们为 docker 图像使用 Docker 注册表,但如果您不使用 Docker,Artifactory 可能会起作用。 minio 是另一种选择。