我已经创建了一个Dockerfile(为一个节点JNLP从属可与詹金斯的Kubernetes插件使用)。我从官方图片延长jenkinsci/jnlp-slave
FROM jenkinsci/jnlp-slave
USER root
MAINTAINER Aryak Sengupta <[email protected]>
LABEL Description="Image for NodeJS slave"
COPY cert.crt /usr/local/share/ca-certificates
RUN update-ca-certificates
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash \
&& apt-get install -y nodejs
ENTRYPOINT ["jenkins-slave"]
我有这个图片救了我的布丁模板内(在K8S插件配置)。现在,当我试图在这个从运行构建,我发现两个容器越来越催生了吊舱内(屏幕截图,以证明相同)。
我波德模板看起来是这样的:
现在,如果我做一个简单docker ps
,我发现有其启动(为什么呢?)两个容器:
现在,詹金斯的詹金斯作业配置,无论我在构建步骤里面添加,的步骤在第一时间拿到容器中执行。
即使我使用官方Node
容器我PodTemplate
内,结果还是一样:
我试图打印我詹金斯作业里面的节点版本,输出“节点未找到”。此外,为了验证我的臀部,我已经做了docker exec
到我的第二个容器,并试图打印Node
版本。在这种情况下,它的工作原理精绝。
这是我的构建步骤是这样的:
因此,要熬下来,我有两个主要问题:
Node
的期望行为?我在想什么?
附: - 请不要让我知道,如果这个问题原来是在一些地方不清楚。
编辑:据我所知,这可以通过使用Pipeline
詹金斯插件,我可以明确地提及container
名工作要做,但我需要从詹金斯UI做到这一点。有没有什么办法来与我已经在做这样的从属名称沿指定容器名称:
詹金斯kubernetes插件将始终创建创建执行构建的吊舱内的JNLP从容器。该podTemplate是你定义你为了执行您的构建需要的其他容器。
在这种情况下,它似乎你想一个节点容器添加到您的podTemplate。在你的构建,你将不得不命名节点容器内的建设发生。
你不应该真正关心的波德运行在那里。所有你需要做的是确保你补充的是有你需要(如Node在这种情况下)的资源的容器。只要你想一个podTemplate您可以添加尽可能多的容器。我有一些有10升以上的容器像PMD,Maven的,卷曲等工序
我使用的是Jenkinsfile与管道。
podTemplate(cloud: 'k8s-houston', label: 'api-hire-build',
containers: [
containerTemplate(name: 'maven', image: 'maven:3-jdk-8-alpine', ttyEnabled: true, command: 'cat'),
containerTemplate(name: 'pmd', image: 'stash.company.com:8443/pmd:pmd-bin-5.5.4', alwaysPullImage: false, ttyEnabled: true, command: 'cat')
],
volumes: [
persistentVolumeClaim(claimName: 'jenkins-pv-claim', mountPath: '/mvn/.m2nrepo')
]
)
{
node('api-hire-build') {
stage('Maven compile') {
container('maven') {
sh "mvn -Dmaven.repo.local=/mvn/.m2nrepo/repository clean compile"
}
}
stage('PMD SCA (docker)') {
container('pmd') {
sh 'run.sh pmd -d "$PWD"/src -f xml -reportfile "$PWD"/target/pmd.xml -failOnViolation false -rulesets java-basic,java-design,java-unusedcode -language java'
sh 'run.sh pmd -d "$PWD"/src -f html -reportfile "$PWD"/target/pmdreport.html -failOnViolation false -rulesets java-basic,java-design,java-unusedcode -language java'
sh 'run.sh cpd --files "$PWD"/src --minimum-tokens 100 --failOnViolation false --language java --format xml > "$PWD"/target/duplicate-code.xml'
}
archive 'target/duplicate-code.xml'
step([$class: 'PmdPublisher', pattern: 'target/pmd.xml'])
}
}
}
好吧,所以我已经想通了解决方案。 mhang李的回答是线索,但他没有解释一个位。
基本上,你需要修改詹金斯从官方的图片发现here并修改它包括你的奴隶的变化也是如此。从本质上讲,你杵JNLP和从集装箱为一体,构建组合图像。
修改格式将只是看起来像这样(从Dockerfile拿起链接)
FROM jenkins/slave:3.27-1
MAINTAINER Oleg Nenashev <[email protected]>
LABEL Description="This is a base image, which allows connecting Jenkins agents via JNLP protocols" Vendor="Jenkins project" Version="3.27"
COPY jenkins-slave /usr/local/bin/jenkins-slave
**INCLUDE CODE FOR YOUR SLAVE. Eg install node, java, whatever**
ENTRYPOINT ["jenkins-slave"] # Make sure you include this file as well
现在,命名从容器jnlp
(原因 - bug)。所以,现在,你将有一个容器的滋生,这将是你的JNLP +奴隶。总而言之,你的Kubernetes插件波德模板会是这个样子。注意自定义URL我已经把在泊坞窗图像。此外,请确保您不包括Command To Run
,除非你需要一个。
完成!你现在建立这个应该容器内运行,就像你编程的Dockerfile应完全发挥作用!
设置容器模板 - >名称为JNLP。 https://issues.jenkins-ci.org/browse/JENKINS-40847