Jenkinsfile模板挂载卷

时间:2019-07-29 16:02:19

标签: kubernetes jenkins-pipeline persistent-volumes

这是我来自Jenkinsfile的containerTemplate片段,它创建了一个pod和一个名为mvn-c1的容器到Kubernetes上。

containerTemplate(
  name: 'mvn-c1',
  image: 'mycompany.lab/build_images/mvn_c1_k8s:0.3',
  privileged: true,
  ttyEnabled: true,
  command: 'cat',
  imagePullSecrets: ['docker-repo'],

  volumeMounts: [ name: 'maven-repo1' , mountPath: '/root/.m2' ],
  volumes: [
    nfsVolume( mountPath: '/root/.m2', serverAddress: 'nfs-server-ip', 
    serverPath: '/jenkins_data', readOnly: false ),
  ]
)

问题是该卷无法安装到容器上,也不会在控制台上显示任何解析错误。

我已推荐this documentation来构建containerTemplate

有人幸运地尝试过这种方法吗?

2 个答案:

答案 0 :(得分:1)

欢迎使用StackOverflow @Vamshi

我认为您当前的管道定义存在两个问题:

  1. volumes是podTemplate而不是containerTemplate的一部分
  

警告:发现类类型的未知参数   'org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate':卷

  1. 通常,您的Kubernetes插件在NFS服务器所在的另一个命名空间中生成Jenkins slave Pods,因此将NFS卷指定为NFS服务器的IP地址而不是其Kubernetes服务名称作为“ serverAddress”更为安全。

这是一个可以正常工作的示例:

podTemplate(containers: [
    containerTemplate(name: 'maven',
    image: 'maven:3.3.9-jdk-8-alpine',
    ttyEnabled: true,
    command: 'cat')
  ],
    volumes: [
    nfsVolume( mountPath: '/root/.m2', serverAddress: '10.0.174.57', 
    serverPath: '/', readOnly: false ),
    ]
  ) {

    node(POD_LABEL) {
        stage('Get a Maven project') {
            container('maven') {
                stage('Build a Maven project') {
                    sh 'while true; do date > /root/.m2/index.html; hostname >> /root/.m2/index.html; sleep $(($RANDOM % 5 + 5)); done'
                }
            }
        }

    }
}

验证安装在POD内基于nfs的持久性卷的正确性:

kubectl exec container-template-with-nfs-pv-10-cl42l-042tq-z3n7b -c maven -- cat /root/.m2/index.html
  

输出:   星期一八月26 14:47:28 UTC 2019 nfs-busybox-9t7wx

答案 1 :(得分:0)

首先,感谢您对NFS IP与namepsaces ..的端点关联进行了详细说明,并为帖子之间的长时间差距表示歉意。

我故意隐藏了podTemplate并发布了Jenkinsfile代码段。

通过在具有NFS ip和安装点标记的从站POD yaml文件上提供引用,我能够达到预期的结果。

我将其称为:

class DistrictModal extends React.Component {

constructor(props) {
    super(props);

    this.state = {
        selectedDistricts: []
    }
}

addDistrictToList = (e) => {
    this.setState(prevState => ({
        selectedDistricts: [...prevState.selectedDistricts, e]
    }));

}

render() {

<div className="list-group">
  <button type="button" onClick={() => this.addDistrictToList("1")} > 1. bezirk </button>
  <button type="button" onClick={() => this.addDistrictToList("2")} > 2. bezirk </button>
  <button type="button" onClick={() => this.addDistrictToList("3")} > 3. bezirk </button>
</div>

}}

我的POD yaml具有以下

      kubernetes {
      label "slavepod-${UUID.randomUUID().toString()}"
      yamlFile './k8s-pod.yaml'
    }
  }