jenkins-pipeline - Jenkins 声明式管道中的并行项
问题描述
我正在 jenkins 中设置自动构建和部署作业
现在我有一个像这样设置并行任务的阶段
stage ('Testing & documenting'){
steps {
parallel (
"PHPLOC" : {
echo "Running phploc"
sh "./src/vendor/phploc/phploc/phploc --exclude=./src/vendor --no-interaction --quiet --log-csv=./build/logs/loc.csv src tests"
},
"SLOC": {
echo "Running sloc"
sh "sloccount --duplicates --wide --details . > ./build/logs/sloccount.sc 2>/dev/null"
},
"CPD" : {
echo "Running copy-paste detection"
sh "./src/vendor/sebastian/phpcpd/phpcpd --fuzzy . --exclude src/vendor --log-pmd ./build/logs/phpcpd.xml || true"
},
"MD" : {
echo "Running mess detection on code"
sh "./src/vendor/phpmd/phpmd/src/bin/phpmd src xml phpmd_ruleset.xml --reportfile ./build/logs/phpmd_code.xml --exclude vendor,build --ignore-violations-on-exit --suffixes php"
},
"PHPUNIT" : {
echo "Running PHPUnit w/o code coverage"
sh "./src/vendor/phpunit/phpunit/phpunit --configuration phpunit-quick.xml"
}
)
}
}
阅读https://jenkins.io/blog/2018/07/02/whats-new-declarative-piepline-13x-sequential-stages/后,我注意到它们使用了不同的结构。
stage("Documenting and Testing") {
parallel {
stage("Documenting") {
agent any
stages {
stage("CPD") {
steps {
//CPD
}
}
stage("PMD") {
steps {
//PMD stuff
}
}
}
stage("Testing") {
agent any
stages {
stage("PHPUnit") {
steps {
//PHPUnit
}
}
}
}
我不确定这两种方法之间的区别是什么
解决方案
parallel
在块内运行的第一个示例steps
是由声明性管道的早期版本引入的。这有一些缺点。例如,要parallel
在不同的代理上运行每个分支,您需要使用一个node
步骤,如果这样做,parallel
分支的输出将无法用于post
指令(在阶段或管道级别)。基本上,旧parallel
步骤要求您在声明式管道中使用脚本化管道。
第二个例子是为了克服前者的缺点而引入的真正的声明式语法。此外,此特定示例在并行阶段“记录”中运行两个串行阶段。
您可以阅读此官方博客以了解有关parallel
指令https://jenkins.io/blog/2017/09/25/declarative-1/的更多信息。
推荐阅读
- angular - 将对象发送到 NgRx 存储后无法重置对象
- c++ - c++ 客户端的 Kafka 凭据和使用者参数
- oracle-apex - Oracle Apex:如果班车列表仅包含单个项目,则自动选择
- javascript - 如何在 jest 和酵素中设置 useState Hook 的初始状态值?
- clickhouse - clickhouse 基于磁盘的字典
- python - 在 Python 3.7 中使用 for 循环重命名字典键
- python - 插值曲线末端所需的垂直线
- reactjs - 如何解决本机反应中的以下错误?
- javascript - 尝试遍历 DOM 节点,并获取文本格式的值
- javascript - Angular中mat-select中的垃圾箭头