gpt4 book ai didi

jenkins - 如何在独立的 Pod 中运行声明性 Jenkins 管道的并行阶段

转载 作者:行者123 更新时间:2023-12-02 04:57:27 24 4
gpt4 key购买 nike

我正在尝试在声明性 Jenkins 管道上的不同 kubernetes pod上并行运行一些端到端测试,但是 Jenkins 似乎尝试运行SAME kubernetes pod 上的并行阶段。这会导致数据库死锁,因为两个进程都尝试插入/截断/更新/查询相同的表。有没有办法可以为每个并行阶段启动不同的 Pod?

kubernetes-plugin 配置:

  agent {
kubernetes {
label 'my-label'
defaultContainer 'jnlp'
yaml """
apiVersion: v1
kind: Pod
metadata:
name: dind
spec:
containers:
- name: < default container >
image: < image >
securityContext:
privileged: true
fsGroup: 1000
command:
- cat
tty: true
volumeMounts:
- name: jenkins-bundle-gems
mountPath: /usr/local/bundle


- name: <tests-container-name>
image: < image >
securityContext:
privileged: true
fsGroup: 1000
volumeMounts:
- name: jenkins-bundle-gems
mountPath: /usr/local/bundle
command:
- cat
tty: true
"""
}
}

并行阶段:

      stage('Test'){
parallel {
stage("Branch 1") {
steps {
container('<tests-container-name>') {
sh "jenkins/scripts/initdb.sh"
sh 'bundle exec rspec --exclude-pattern "spec/features/*_spec.rb" spec'
}
}
}
stage("Branch 2") {
steps {
container('<tests-container-name>') {
sh "jenkins/scripts/initdb.sh"
sh "bundle exec rspec `jenkins/scripts/split_features.sh 0`"
}
}
}
}
}

期望:我希望 Jenkins 为每个并行阶段旋转两个不同的 Pod。这将使我能够为每个测试使用不同的数据库。

实际结果:Jenkins 在同一个 Pod 上同时运行两个阶段。

最佳答案

你有__________:阶段>并行>阶段>步骤

您还需要:stage >parallel>stage>agent

不要重复 pod 定义两次,建议将 pod 定义放在单独的文件中,并使用 yamlFile 而不是 yaml 引用它:

  stage('Test'){
parallel {
stage("Branch 1") {
agent {
kubernetes {
defaultContainer 'jnlp'
yamlFile 'Jenkins.pod.yaml'
}
}
steps {
container('<tests-container-name>') {
sh "jenkins/scripts/initdb.sh"
sh 'bundle exec rspec --exclude-pattern "spec/features/*_spec.rb" spec'
}
}
}
stage("Branch 2") {
agent {
kubernetes {
defaultContainer 'jnlp'
yamlFile 'jenkins.pod.yaml'
}
}
steps {
container('<tests-container-name>') {
sh "jenkins/scripts/initdb.sh"
sh "bundle exec rspec `jenkins/scripts/split_features.sh 0`"
}
}
}
}
}

提示

如果blueocean是您的插件之一,它将帮助您在http://HOST/blue/organizations/jenkins/pipeline-editor/下绘制管道,然后您可以复制Jenkins文件输入 [Cmd + s] 代码

关于jenkins - 如何在独立的 Pod 中运行声明性 Jenkins 管道的并行阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55372211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com