詹金斯 - 在主人和奴隶中经营一份工作

时间:2012-02-09 16:12:05

标签: jenkins

我有一个master(linux)和一个windows slave设置,并希望在主服务器和从服务器上构建一个单独的工作。 “限制此项目可以运行的位置”选项允许我们将作业绑定到特定的从属服务器,但是是否可以将一个作业绑定到主服务器以及从服务器?如何配置“构建步骤”,因为在Windows上运行它需要使用Windows批处理命令构建,Linux需要shell命令。例如,即使作业尝试在主服务器和从服务器上运行,也不会在某一时刻失败,因为两个构建选项(使用batch和shell命令)都将被执行?

2 个答案:

答案 0 :(得分:16)

好吧,在Jenkins你可以创建一组机器(主机或从机)来做到这一点:

  • 点击jenkins第一页上的机器名称
  • 进入节点配置菜单
  • 然后,您可以在“标签”字段中输入一些标签。我们添加一个mutli_platform标签,例如
  • 返回Jenkins的第一页
  • 为您需要运行作业的每台计算机执行此操作
  • 返回Jenkins的第一页
  • 单击要在多个节点上运行的作业
  • 进入配置菜单
  • 检查Restrict where this project can be run并将mutli_platform放入其中。

然后,您的版本将能够在mutli_platform标签上运行。

对于第二部分,多平台脚本,您可以使用ant构建或python构建(使用python plugin)。

编辑:如果您需要在2个(或更多)平台上构建,则应使用Matrix Job。您将能够创建一个作业并强制它在您需要的每个奴隶上运行。

答案 1 :(得分:0)

你应该这样做:

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 上执行的命令。