如何在安装了Kubernetes插件的Kubernetes上运行的Jenkins上运行kubectl

yqlxgs2m  于 2023-03-01  发布在  Jenkins
关注(0)|答案(1)|浏览(163)

我有一个应用程序打包在一个 Helm 图表中。我有Jenkins CI运行在Kubernetes集群上。我想使用Jenkins声明性管道发布我的应用程序。为此,我安装了Jenkins Kubernetes插件。
Kubernetes插件的配置如下:

pipeline {
  agent {
    kubernetes {
      yaml '''
        apiVersion: v1
        kind: Pod
        metadata:
          labels:
            app: jenkins-ci
        spec:
          serviceAccountName: jenkins-admin
          containers:
          - name: helm
            image: alpine/helm:3.10.2
            command:
            - cat
            tty: true
          - name: kubectl
            image: bitnami/kubectl:latest
            command:
            - cat
            tty: true
        '''
      retries 2
    }
  }

...
}

它工作正常:

stage('Pull helm chart') {
      steps {
        container('helm') {
          sh "helm pull ..."
        }
      }
    }

但以下方法行不通:

stage('Create Docker Registry secret') {
      steps {
        container('kubectl') {
          sh 'kubectl create ...'
        }
      }
    }

我做错了什么?我怎么能从Jenkins管道运行“kubectl”命令?
谢谢你的帮助和建议。

ljo96ir5

ljo96ir51#

在yaml中添加安全上下文

apiVersion: v1
kind: Pod
spec:
  securityContext:
    runAsUser: 1000 # default UID of jenkins user in agent image
  containers:
  - name: maven
    image: maven:3.8.1-jdk-8
    command:
    - cat
    tty: true

根据www.example.com中的Kubernetes插件配置https://plugins.jenkins.io/kubernetes/#plugin-content-pipeline-sh-step-hangs-when-multiple-containers-are-used,“当jnlp容器中的用户UID与其他容器中的用户UID不同时会发生这种情况。您使用的所有容器都应该具有相同的用户UID,也可以通过设置securityContext来实现”。

相关问题