jenkins-pipeline - 一次锁定 Jekinsfile 管道中的资源以用于并行和顺序阶段
问题描述
我正在尝试在我的 Jenkinsfile 中运行以下过程:
- 构建应用程序
- 触发将两个组件并行部署到测试环境
- 富部署
- 酒吧部署
- 在已部署的应用程序上运行测试
第 2 步和第 3 步需要锁定一个资源,因为我只有一个可用的测试环境。
无需并行运行第 2 步即可实现这一目标,但是,当我将 Jenkinsfile 配置为一起运行它们时,我从 Jenkins 收到以下错误:
WorkflowScript: 19: Parallel stages or branches can only be included in a top-level stage. @ line 19, column 7.
stage('Deploy Foo') {
^
这是完整的 Jenkins 文件:
pipeline {
agent any
stages {
stage('Build') {
steps {
powershell(script: '.\\ci\\build.ps1 -Script .\\ci\\build\\build.cake')
}
}
stage('Deploy and run tests') {
when {
branch('develop')
}
options {
lock('test-env')
}
stages {
stage('Deploy') {
parallel {
stage('Deploy Foo') {
steps {
build(job: 'Deploy_Foo')
}
}
stage('Deploy Bar') {
steps {
build(job: 'Deploy_Bar')
}
}
}
}
stage('Run tests') {
steps {
powershell(script: '.\\ci\\build.ps1 -Script .\\ci\\test\\build.cake')
}
}
}
}
}
}
我还尝试了一个解决方案,为 Deploy 和 Test 阶段分别锁定test-env资源,但是,当其他一些正在运行的作业可能等待该资源并在 Deploy 和 Test 阶段之间“跳转”时,这会增加竞争条件的风险目前的工作。
有没有办法实现上述 Jenkinsfile 中描述的顺序和并行阶段的混合?
解决方案
推荐阅读
- android - 传递给 SQL 语句的变量不返回任何内容,但没有错误
- rust - 结构中的闭包与函数声明
- javascript - JS如何只做一次
- reactjs - 在 react.js 中使用时刻格式化日期
- java - 为testng黄瓜appium测试实现测试运行器
- sql - BigQuery SQL,将 SQL 查询结果附加到现有表
- ios - 带有--minifyjs标志的Ionic 3构建仅在iOS中首次加载应用程序时卡住了
- virtual-machine - 我们可以用虚拟机管理程序伪造处理器和 RAM 吗?
- java - 如何输入参数来获取请求?
- javascript - Google Apps 脚本的 DocumentApp 不返回元素的所有属性?