本文目录导读:

- 并行执行多个Stage(声明式Pipeline)
- 使用failFast选项控制失败行为
- 动态并行任务(脚本式Pipeline)
- 并行执行不同环境/配置
- 矩阵并行(Matrix)
- 带超时的并行任务
- 使用脚本式Pipeline并行多个节点
- 并行构建多模块项目
- 限制并行任务数量
- 带条件的并行执行
- 注意事项
- 最佳实践
在Jenkins中并行执行多个任务有多种方式,以下是常用的几种方法:
并行执行多个Stage(声明式Pipeline)
pipeline {
agent any
stages {
stage('并行任务') {
parallel {
stage('任务1') {
steps {
echo '执行任务1'
sleep 5
}
}
stage('任务2') {
steps {
echo '执行任务2'
sleep 3
}
}
stage('任务3') {
steps {
echo '执行任务3'
sleep 4
}
}
}
}
stage('后续处理') {
steps {
echo '所有并行任务完成'
}
}
}
}
使用failFast选项控制失败行为
pipeline {
agent any
stages {
stage('并行任务') {
parallel {
// 当任何一个并行分支失败时,立即停止其他分支
failFast true
stage('任务1') {
steps {
echo '任务1'
}
}
stage('任务2') {
steps {
echo '任务2'
}
}
}
}
}
}
动态并行任务(脚本式Pipeline)
def tasks = ['编译', '测试', '部署', '打包']
parallel tasks.collectEntries { taskName ->
["任务-${taskName}" : {
node {
echo "开始执行 ${taskName}"
// 执行具体任务
sleep 2
echo "完成 ${taskName}"
}
}]
}
并行执行不同环境/配置
pipeline {
agent any
stages {
stage('多环境测试') {
parallel {
stage('Linux测试') {
agent { label 'linux' }
steps {
sh 'echo "在Linux上运行测试"'
}
}
stage('Windows测试') {
agent { label 'windows' }
steps {
bat 'echo "在Windows上运行测试"'
}
}
stage('Mac测试') {
agent { label 'mac' }
steps {
sh 'echo "在Mac上运行测试"'
}
}
}
}
}
}
矩阵并行(Matrix)
pipeline {
agent any
stages {
stage('矩阵测试') {
parallel {
stage('组合测试') {
matrix {
axes {
axis {
name 'OS'
values 'linux', 'windows'
}
axis {
name 'BROWSER'
values 'chrome', 'firefox'
}
}
stages {
stage('测试') {
steps {
echo "测试 ${OS} 上的 ${BROWSER}"
}
}
}
}
}
}
}
}
}
带超时的并行任务
pipeline {
agent any
stages {
stage('超时并行') {
parallel {
stage('快速任务') {
steps {
echo '快速任务'
}
}
stage('耗时任务') {
options {
timeout(time: 10, unit: 'SECONDS')
}
steps {
echo '耗时任务开始'
sleep 15
echo '超时会提前结束'
}
}
}
}
}
}
使用脚本式Pipeline并行多个节点
node {
// 定义需要并行执行的任务
def branches = [:]
branches['并行任务1'] = {
node('worker1') {
echo '在worker1上执行任务1'
// 执行具体操作
}
}
branches['并行任务2'] = {
node('worker2') {
echo '在worker2上执行任务2'
// 执行具体操作
}
}
branches['并行任务3'] = {
node('worker3') {
echo '在worker3上执行任务3'
// 执行具体操作
}
}
parallel branches
}
并行构建多模块项目
pipeline {
agent any
stages {
stage('构建') {
parallel {
stage('模块A') {
steps {
sh 'cd moduleA && mvn clean install'
}
}
stage('模块B') {
steps {
sh 'cd moduleB && mvn clean install'
}
}
stage('模块C') {
steps {
sh 'cd moduleC && mvn clean install'
}
}
}
}
}
}
限制并行任务数量
def maxParallel = 2
// 使用类来限制并行数量
class ParallelService {
static int counter = 0
}
pipeline {
agent any
stages {
stage('限量并行') {
steps {
script {
def tasks = ['任务1', '任务2', '任务3', '任务4', '任务5']
tasks.collate(maxParallel).each { batch ->
parallel batch.collectEntries { task ->
["${task}" : {
echo "执行 ${task}"
sleep 3
}]
}
}
}
}
}
}
}
带条件的并行执行
pipeline {
agent any
stages {
stage('条件并行') {
parallel {
stage('必须执行') {
steps {
echo '这个任务总是执行'
}
}
stage('条件执行') {
when {
expression {
// 根据条件判断是否执行
return params.RUN_EXTRA_TASKS == true
}
}
steps {
echo '只在特定条件下执行'
}
}
}
}
}
}
注意事项
- 资源限制:并行任务会占用更多系统资源,注意控制并发数量
- 依赖关系:确保并行任务之间没有依赖关系
- 错误处理:使用
failFast或catchError处理失败情况 - 日志输出:并行任务的日志会交错显示,注意区分
- 节点资源:在不同节点上并行时,确保有足够的执行器
最佳实践
- 合理规划并行粒度,避免过多小任务
- 使用
stage(name)明确命名并行分支 - 考虑使用
failFast策略节省资源 - 对于动态数量的并行任务,使用脚本式Pipeline
- 添加适当的超时和重试机制
选择合适的并行方式取决于你的具体需求和Jenkins环境配置。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播