我已经创建了一个共享库,并且它有一个名为myBuildPlugin.groovy
的常规文件:
def label = "worker-${UUID.randomUUID().toString()}"
podTemplate(label: label, yaml: """
apiVersion: v1
kind: Pod
metadata:
name: my-build
spec:
containers:
- name: jnlp
image: dtr.myhost.com/test/jenkins-build-agent:latest
ports:
- containerPort: 8080
- containerPort: 50000
resources:
limits:
cpu : 1
memory : 1Gi
requests:
cpu: 200m
memory: 256Mi
env:
- name: JENKINS_URL
value: http://jenkins:8080
- name: mongo
image: mongo
ports:
- containerPort: 8080
- containerPort: 50000
- containerPort: 27017
resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: 1
memory: 512Mi
imagePullSecrets:
- name: dtrsecret""")
{
node(label) {
pipelineParams.step1.call([label : label])
}
}
在我的项目中,按以下方式使用myBuildPlugin时,日志显示它永远等待执行程序。当我看着Jenkins时,我可以看到正在创建代理,但是由于某种原因,它无法通过端口50000
与代理进行通讯(或者pod无法与代理进行通讯!)
稍后,我尝试删除yaml
,而是使用以下代码:
podTemplate(label: 'mypod', cloud: 'kubernetes', containers: [
containerTemplate(
name: 'jnlp',
image: 'dtr.myhost.com/test/jenkins-build-agent:latest',
ttyEnabled: true,
privileged: false,
alwaysPullImage: false,
workingDir: '/home/jenkins',
resourceRequestCpu: '1',
resourceLimitCpu: '100m',
resourceRequestMemory: '100Mi',
resourceLimitMemory: '200Mi',
envVars: [
envVar(key: 'JENKINS_URL', value: 'http://jenkins:8080'),
]
),
containerTemplate(name: 'maven', image: 'maven:3.5.0', command: 'cat', ttyEnabled: true),
containerTemplate(name: 'docker', image: 'docker', command: 'cat', ttyEnabled: true)
],
volumes: [
emptyDirVolume(mountPath: '/etc/mount1', memory: false),
hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock')
],
imagePullSecrets: [ 'dtrsecret' ],
)
{
node(label) {
pipelineParams.step1.call([label : label])
}
}
仍然没有运气。有趣的是,如果我在Jenkins配置中定义了所有这些容器,则一切运行顺利。这是我的配置:
这是pod模板的配置:
看来,如果我将标签更改为jenkins-jenkins-slave
以外的其他名称,则会发生此问题。即使是通过Jenkins的配置页定义的,也是如此。如果是这样,我应该如何为不同类型的项目创建多个Pod模板?
直到今天,我还尝试如下使用pod继承,但没有成功:
def label = 'kubepod-test'
podTemplate(label : label, inheritFrom : 'default',
containers : [
containerTemplate(name : 'mongodb', image : 'mongo', command : '', ttyEnabled : true)
]
)
{
node(label) {
}
}
请帮助我解决这个问题。谢谢
答案 0 :(得分:1)
您的Pod配置有些变化,您无法将Jenkins和Mongo容器使用相同的端口50000
。通常,您要指定唯一的端口,因为Pod共享相同的port space。
在这种情况下,您似乎需要端口50000
才能建立通往Jenkins代理的隧道。请记住,Jenkins插件可能正在做其他事情,例如设置Kubernetes Service或使用内部Kubernetes DNS。
在第二个示例中,我什至看不到端口50000
被暴露。