我正在使用kuberntes-plugin。在其自述文件中,它给出了如何使用多个容器图像编写脚本管道,如
podTemplate(label: 'mypod', containers: [
containerTemplate(name: 'maven', image: 'maven:3.3.9-jdk-8-alpine', ttyEnabled: true, command: 'cat'),
containerTemplate(name: 'golang', image: 'golang:1.8.0', ttyEnabled: true, command: 'cat')
]) {
node('mypod') {
我尝试了以下的声明性管道。
pipeline {
agent {
kubernetes {
//cloud 'kubernetes'
label 'mypod'
containerTemplate {
name 'maven'
image 'maven:3.3.9-jdk-8-alpine'
ttyEnabled true
command 'cat'
}
containerTemplate {
name 'containtertwo'
image 'someimage'
ttyEnabled true
}
}
}
它创建一个只有一个容器的pod。
如何将多个containerTemplates与声明性管道一起使用?
答案 0 :(得分:1)
这不是您问题的解决方案,但是我在查看之后找到了一些信息。
KubernetesDeclarativeAgent只有一个containerTemplate
。无论哪个containerTemplate
位于您的容器集合的底部,都将是使用的那个。
在您的示例中,它将是containtertwo
。
您无法拥有多个顶级agents
,并且您无法在代理中拥有多个kubernetes
。而现在你不能拥有多个容器。如果为此抛出某种错误或警告,我更愿意。
我能想到的有两种解决方法。如果您必须使用声明式,那么您可以向agent
添加stage
,但这可能会导致其自身的问题。另一个是脚本管道,这就是我要做的事情。
关于此的文档还有很多不足之处。
答案 1 :(得分:0)
您可以在Pod模板文件的帮助下实现这一目标。我使用以下程序在kubernetes上部署我的应用程序:
apiVersion: v1
kind: Pod
metadata:
labels:
label: docker
spec:
containers:
- name: docker
image: jenkins/jnlp-agent-docker
command:
- cat
tty: true
volumeMounts:
- mountPath: '/var/run/docker.sock'
name: docker-socket
- name: kubectl
image: bitnami/kubectl
command:
- cat
tty: true
volumes:
- name: docker-socket
hostPath:
path: '/var/run/docker.sock'
securityContext:
runAsUser: 0
然后在声明性管道中使用它:
stage('Deploy') {
when {
anyOf { branch 'master'; tag '' }
}
agent {
kubernetes {
defaultContainer 'kubectl' // All `steps` instructions will be executed by this container
yamlFile 'path/to/pod/template.yaml'
}
}
steps {
container('docker') {
sh 'echo This is executed in the docker container'
}
}
}
您还可以借助yaml
选项而不是yamlFile
在Jenkinsfile中指定模板,只需在此使用多行字符串即可。