簡體   English   中英

Jenkins - 在 master 和 slave 中運行單個作業

[英]Jenkins - Running a single job in master as well as slave

我有一個主 (linux) 和一個 Windows 從屬設置,並希望在主服務器和從屬服務器上構建一個作業。 “限制此項目可以運行的位置”選項允許我們將作業綁定到特定的從站,但是否可以將一個作業綁定到主站和從站? 如何配置“構建步驟”,因為在 Windows 上運行它需要使用 Windows 批處理命令進行構建,而 Linux 需要 shell 命令。 例如,即使作業嘗試在 master 和 slave 上運行,它是否會在某一時刻失敗,因為這兩個構建選項(使用批處理和 shell 命令)都將被執行?

好吧,在 Jenkins 中,您可以創建機器組(主機或從機),以執行此操作:

  • 在jenkins的第一頁點擊機器名稱
  • 進入節點配置菜單
  • 然后,您可以在標簽字段中輸入一些標簽。 例如,讓我們添加一個mutli_platform標簽
  • 回到Jenkins的第一頁
  • 為您需要運行作業的每台機器執行此操作
  • 回到Jenkins的第一頁
  • 單擊要在多個節點上運行的作業
  • 進入配置菜單
  • 檢查Restrict where this project can be run並將mutli_platform放入其中。

然后,您的構建將能夠在mutli_platform標簽上運行。

對於第二部分,多平台腳本,您可以使用 ant 構建或 python 構建(使用python 插件)。

編輯:如果您需要在 2 個(或更多)平台上構建,您應該使用Matrix Job 您將能夠創建一個作業並強制它在您需要的每個奴隸上運行。

你應該這樣做:

import groovy.json.JsonSlurperClassic

def requestNodes() {
    def response = httpRequest url: '<your-master-url>/computer/api/json', authentication: '<configured-authentication>'
    println("Status: "+response.status)
    return new JsonSlurperClassic().parseText(response.content)
}

def Executor(node_name) {
    return {
        stage("Clean ${node_name}") {
            node(node_name) {
                //agent {node node_name}
                echo "ON NODE: ${node_name}."
            }
        }
    }
}

def makeAgentMaintainer() {
    def nodes = requestNodes()
    def agent_list = []
    for (e in nodes['computer']) {
        echo e.displayName
        if (!e.offline) {
            if (e.displayName != "master") {
                agent_list.add(e.displayName)
            }
        }
    }
    def CleanAgentsMap = agent_list.collectEntries {
        ["${it}" : Executor(it)]
    }
    return CleanAgentsMap
}

node {
    parallel makeAgentMaintainer()
}

您將需要 http_request 插件並進行一些審批。 在 Executor 函數中,您可以定義要在每個 Agent 上執行的命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM