我一直在通过 Jenkins 进行 android OS 构建自动化,并且存储库很大,构建本身需要相当长的时间。因此,我需要在我的从属服务器上运行,它有更多的能力和可用于构建的线程,而不是将主服务器磁盘空间填满到其他开发人员无法使用它的程度。
当我将第一个构建生成部署到主服务器时,我检查了配置并查看了 Jenkins 的最佳实践。
https://wiki.jenkins.io/display/JENKINS/Jenkins+Best+Practices
如果您有更复杂的安全设置,允许某些用户仅配置作业,但不能管理 Jenkins,您需要阻止他们在主节点上运行构建,否则他们可以不受限制地访问 JENKINS_HOME 目录。您可以通过将执行程序计数设置为零来做到这一点。相反,请确保所有作业都在从属设备上运行。这确保了 jenkins master 可以扩展以支持更多的作业,并且它还可以防止构建意外/恶意地修改 $JENKINS_HOME 上的潜在敏感数据。如果您需要在主服务器上运行一些作业(例如 Jenkins 本身的备份),请使用作业限制插件来限制可以在那里执行的作业。
我注意到我们在 master 上有两个可用的 executor,根据最佳实践,如果你不想在 master 上构建,这应该设置为零。我将其设置为零并重试了我的构建。
令我惊讶的是,它仍然建立在主人身上。下面是我的 Jenkins 文件,它暗示要建立在我的奴隶上。
pipeline {
agent {label 'van-droid'}
stages {
stage('Build') {
steps {
echo 'Building..'
sh 'make clean'
sh 'export USE_CCACHE=1'
sh 'export CCACHE_DIR=/nvme/.ccache'
sh './FFTools/make.sh'
}
}
}
}
有人知道发生了什么吗?
好的,所以我能够强制构建到从站的唯一方法是安装节点/标签插件并添加一个参数,说明该项目只能在我请求的特定从站上构建。这似乎是一种更好的方法,因为一些开发人员实际上是在使用 master 来构建某些项目,并且当我将 executors 设置为零时,他们的构建处于挂起状态。
你也可以试试
这应该避免在主节点中执行作业(通过您分配给主节点的标签更改主节点)。
“令我惊讶的是,它仍然建立在大师之上。”
所有管道构建在主服务器中作为“Flyweight”执行器运行。管道构建实际上是从它们出列的那一刻开始的。
注意显示的细微差别。
在此处显示的示例中,Master 有 4 个执行器,它们被编号,并且两个作业实际上在 Master 上运行。另外两个(为清楚起见以黄色突出显示)是“Flyweights” - 也称为 OneOffExecutors,它们会出现一段时间,直到它们被派往其他地方,但它们确实在工作期间运行。您可以使用如下查询查看主服务器上正在运行的内容作为 OneOff 的:
https://YOUR.JENKINS.URL/computer/(master)/api/python?pretty=true&tree=oneOffExecutors[currentExecutable[fullDisplayName,result,id,url]]&depth=1
您不必使用 python 渲染,但它比 XML 更容易阅读。
Flyweight 或“OneOffExecutors”是 master 跟踪和协调管道作业的方式。您可以在上面共享的链接中阅读有关它们的更多信息。