Jenkins Kubernetes pod在未指定容器('name ')时使用什么容器?

3hvapo4f  于 2022-12-03  发布在  Jenkins
关注(0)|答案(1)|浏览(177)

我已经从这里安装了Jenkins https://charts.jenkins.io,阅读Kubernetes插件页面https://plugins.jenkins.io/kubernetes/,您可以将Jenkinsfile定义为

podTemplate(yaml: '''
    apiVersion: v1
    kind: Pod
    spec:
      containers:
      - name: maven
        image: maven:3.8.1-jdk-8
        command:
        - sleep
        args:
        - 99d
      - name: golang
        image: golang:1.16.5
        command:
        - sleep
        args:
        - 99d
''') {
  node(POD_LABEL) {
    stage('Get a Maven project') {
      git 'https://github.com/jenkinsci/kubernetes-plugin.git'
      container('maven') {
        stage('Build a Maven project') {
          sh 'mvn -B -ntp clean install'
        }
      }
    }

    stage('Get a Golang project') {
      git url: 'https://github.com/hashicorp/terraform-provider-google.git', branch: 'main'
      container('golang') {
        stage('Build a Go project') {
          sh '''
            mkdir -p /go/src/github.com/hashicorp
            ln -s `pwd` /go/src/github.com/hashicorp/terraform
            cd /go/src/github.com/hashicorp/terraform && make
          '''
        }
      }
    }

  }
}

问题是,如果你把指令放在一个容器('name ')里,指令就会在那个容器里运行。但是,如果你不指定容器,它就能运行。我假设随机选择一个容器来运行sh命令。例如:

stage('example stage') {
          sh 'echo "hello world"'
    }

谢谢

zy1mlcev

zy1mlcev1#

通过声明性管道,您可以声明pod定义并使用defaultContainer设置默认值。Jenkins Kubernetes插件还将在运行Jenkins代理节点的所有pod定义中注入一个jnlp容器,这是默认容器。
您可以使用K8s插件在作业的控制台日志上检查集群请求和示例化的最终pod定义。

相关问题