jenkins复杂的buildflow,这是可能的吗?

kuarbcqp  于 5个月前  发布在  Jenkins
关注(0)|答案(2)|浏览(52)

x1c 0d1x的数据
我想有一个Jenkins构建流程,看起来像这样。

  • 在触发构建之后,所有从机并行运行相同的作业(设置作业)。
  • 如果任何奴隶失败了这项工作,他们不应该继续下去。
  • 对于所有通过该作业的从机,它们应该从需要完成的作业池中抓取一个作业。一旦从机完成一个作业,它们应该返回完成池中的另一个作业。

我几个星期前才开始使用Jenkins,他们现在设置它的方式是,每个作业都由一个从站来完成,他们必须首先运行安装作业。这真的减慢了构建时间,因为我有大约30个作业,安装需要大约2分钟。
我使用Jenkins作为自动化测试平台,作业池中的所有作业都可以独立运行。我目前有5个从站和~30个作业。

ruoxqz4g

ruoxqz4g1#

下面的代码应该可以做到这一点:

def jobPool = new ArrayDeque()
jobPool.add({
    echo "Doing stuff on ${env.NODE_NAME}"
});
jobPool.add({
    echo "Doing other stuff on ${env.NODE_NAME}, a little slower"
    sleep 4
});
jobPool.add({
    echo "Doing more stuff on ${env.NODE_NAME}, even slower"
    sleep 10
});
jobPool.add({
    echo "Doing stuff quick on ${env.NODE_NAME}"
});
jobPool.add({
    echo "Doing stuff quicker on ${env.NODE_NAME}"
});

def par = [:]

for (x in ["master", "urban"]) {
    def nodeName = x; // needed due to variable scoping
    par[nodeName] = {
        node (nodeName) {
            try {
               echo "Doing setup on ${env.NODE_NAME}!"
               // Do you're setup
               echo "Done with setup"
            } catch (Exception e) {
               echo "Will not use this node as it failed setup!"
               return;
            }
            while (true) {
               // echo "${jobPool.size()}"
                def subTask = jobPool.poll()
                //echo "${jobPool.size()} ${subTask}"
                if (subTask == null) {
                    break;
                }
                // Might wan't try catch around the next line if you wan't to continue if a job fails
                subTask()
            }
        }
    }
}
parallel par
if (!jobPool.isEmpty()) {
  error "Not all tasks was done!"
}

字符串
只需将“作业池作业”添加到jobPool变量并修改设置部分。

1l5u6lss

1l5u6lss2#

看起来你想在同一个工作中有不同的阶段。这在jenkins 2的管道中变得容易多了。这里有一些图片:https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Stage+View+Plugin
[groovy]代码最终看起来像这样:

node {
  stage 'Checkout'
  svn 'https://svn.mycorp/trunk/'
  stage 'Build'
  sh 'make all'
  stage 'Test'
  sh 'make test'
}

字符串

相关问题