詹金斯建構發生在主人而不是奴隸上
我一直在通過 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 設置為零時,他們的建構處於掛起狀態。
你也可以試試
agent {label '!master'}
這應該避免在主節點中執行作業(通過您分配給主節點的標籤更改主節點)。