Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Jenkinsfile中混合和匹配fabric8 pod模板-这真的是它的工作方式吗?_Jenkins_Fabric8 - Fatal编程技术网

在Jenkinsfile中混合和匹配fabric8 pod模板-这真的是它的工作方式吗?

在Jenkinsfile中混合和匹配fabric8 pod模板-这真的是它的工作方式吗?,jenkins,fabric8,Jenkins,Fabric8,在该项目的自述文件中有一章“混合和匹配”,描述了如何将多个pod模板组合成一个混合了多种构建功能的pod,比如maven和docker二进制文件 从本文件中: 在某些情况下,我们可能需要一个更复杂的设置,它可能需要不止一个模板。(例如,可以运行docker构建的maven容器) 对于这种情况,您可以将docker模板和maven模板组合在一起: 这个mvn调用显然需要maven和本地docker功能才能在“maven”容器上使用 对于一个启用fabric8的项目,我也有类似的问题,但还需要在顶部

在该项目的自述文件中有一章“混合和匹配”,描述了如何将多个pod模板组合成一个混合了多种构建功能的pod,比如maven和docker二进制文件

从本文件中:

在某些情况下,我们可能需要一个更复杂的设置,它可能需要不止一个模板。(例如,可以运行docker构建的maven容器)

对于这种情况,您可以将docker模板和maven模板组合在一起:

这个mvn调用显然需要maven和本地docker功能才能在“maven”容器上使用

对于一个启用fabric8的项目,我也有类似的问题,但还需要在顶部添加“npm”二进制文件。npm调用也通过exec插件从maven构建完成,因此我需要一个包含maven+docker+npm的容器

在我努力让它发挥作用的同时,我还交叉检查了。它还描述了pod模板是如何嵌套/继承的,但听起来并不像是一个将两个模板的功能结合在一起的容器。听起来,这种机制只能在父模板的顶部添加或修改容器配置。它并没有真正地结合图像

从本文件中:

podTemplate可以从现有模板继承,也可以不继承。这意味着podTemplate将从其继承的模板中继承节点选择器、服务帐户、映像提取机密、containerTemplates和卷

添加到podTemplate的容器模板,如果在“父”模板中具有匹配的containerTemplate(具有相同名称的containerTemplate),将继承父containerTemplate的配置。如果未找到匹配的containerTemplate,则按原样添加模板

这也是我解释组合尝试结果的方式。合并docker和maven模板不会创建一个docker+maven容器,而是在pod中创建两个容器“docker”和“maven”,每个容器都有一个功能。但是,没有一个容器可以将这些功能组合在一起,也需要docker的mvn调用应该可以工作

为什么docker+maven仍然有效?我认为maven builder的图片“fabric8/maven builder:2.2.297”已经是docker的开箱即用。基于该图像的容器上的终端可以调用docker二进制文件,而不涉及任何父模板

所以,我想我显然误解了一些可怕的事情。有人能解释一下这个话题吗

更新
现在我更深入地探讨了这个话题。不,您不能将多个容器的功能与此功能组合在一起。我相信在fabric8管道库上编写自述文件的人并没有真正意识到这一点。您需要一个基于图像的容器,它可以组合您需要的所有内容。

我认为从技术上讲,将两个docker容器组合在一起是不可能的,因此我认为文档非常容易误导您

dockerTemplate {
    mavenTemplate(label: 'maven-and-docker') {
        node('maven-and-docker') {
             container(name: 'maven') {
                sh 'mvn clean package fabric8:build fabric8:push'
             }            
        }
    }
}