kubernetes - 为主管道和底层管道保留相同的 jenkins 代理 pod
问题描述
我正在使用 jenkins 和 kubernetes,每次触发作业时都会创建一个新的入站代理 pod 来执行作业,到目前为止一切都很好。
但是,具有下方管道的管道是一个问题:
pipeline {
agent { label 'kubernetePod' }
stages {
stage('Building') {
steps{
build job: 'Build', parameters: []
}
}
stage('Testing') {
steps{
build job: 'Test', parameters: []
}
}
}
在这种情况下,我们有三个管道
- “主”管道具有“构建”阶段和“测试”阶段
- “构建”管道
- “测试”管道
因此创建了一个pod 'A'来执行主管道,
然后创建一个pod 'B'来检查和构建解决方案
最后创建了一个pod 'C'来执行解决方案测试,但它崩溃了,因为解决方案包含在pod 'B'中。
我的问题是如何保留 pod 'A' 来执行下面的管道!
感谢您的帮助。
此致
解决方案
我认为 Kubernetes slaves 被设计成无状态的并且是一次性使用的。
我认为在某些情况下可能会有所帮助的唯一解决方法是用于设置状态应该保持idleMinutes
多长时间。
在您的情况下,如果您使用适当的值,您将能够使用相同的值运行和作业(来自您的示例)。Pod
Running
idleMinutes
Build
Test
Pod
podB
我创建了一个示例来说明它是如何工作的。
这是管道片段:
pipeline {
agent { kubernetes {
label 'test'
idleMinutes "60"
}}
stages {
stage('Building') {
steps{
build job: 'Build'
}
}
stage('Testing') {
steps{
build job: 'Test'
}
}
}
}
这是Build
工作:
node('test') {
stage('Run shell') {
sh 'touch /home/jenkins/test_file'
sh 'echo 123abc > /home/jenkins/test_file'
}
}
这是Test
作业:
注意:此作业读取作业创建的文件Build
。
node('test') {
stage('Run shell') {
sh 'cat /home/jenkins/test_file'
}
}
结果,我们可以看到创建了两个 Pod(podA
并且podB
从您的示例中)并且它们仍处于Running
状态:
# kubectl get pods
NAME READY STATUS RESTARTS AGE
test-99sfv-7fhw2 1/1 Running 0 4m45s
test-99sfv-vth3j 1/1 Running 0 4m25s
此外,test-99sfv-vth3j
Pod
还有test_file
由Build
作业创建的:
# kubectl exec test-99sfv-vth3j -- cat /home/jenkins/test_file
123abc
推荐阅读
- angular - Angular 可观察数组,由 http 请求和手动添加的数据填充
- windows - 如何阻止 WinDbg 缩小其窗口?
- swift - 在 MPSCNNGraph 的输入处使用负浮点值
- php - Laravel 5.2 w/ Yajra 数据表,在对象的读取视图中,如何显示父模型的 hasMany 子级的所有数据表?
- javascript - 将 Javascript 对象转换为不同的替代数组保留键
- c# - 等待来自 PowerShell 的异步 C# 方法
- css - 实际画布文本尺寸
- javascript - 使用 javascript 启用禁用的 html 按钮
- javascript - 输入为“空”。如何用日期计算输入值?
- python - 使用 python 在 .txt 文件中写入 2 个不同的行