Невозможно передать параметр пространства имен в плагин kubernetes-cli для Jenkins - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть несколько различных контекстов с пространствами имен, определенных в моем кластере k8s.Используя разные конвейеры для Дженкинса, я бы хотел переключаться между ними.Идея заключается в том, чтобы: на основе ветки git выполнить развертывание в определенной среде.Чтобы сделать это, мне нужно переключиться на существующие производственные / dev / feature контексты и пространства имен.

Я хочу использовать https://wiki.jenkins.io/display/JENKINS/Kubernetes+Cli+Plugin Это пример синтаксиса для сценария Jenkins со сценарием:

Пример:

node {
  stage('List pods') {
    withKubeConfig([credentialsId: '<credential-id>',
                    caCertificate: '<ca-certificate>',
                    serverUrl: '<api-server-address>',
                    contextName: '<context-name>',
                    clusterName: '<cluster-name>'
                    ]) {
      sh 'kubectl get pods'
    }
  }
}

И, как вы можете видеть, он ничего не принимает для namespace

Это пример производственного контекста с пространством имен, который я использую:

$ kubectl config get-contexts 
CURRENT   NAME             CLUSTER                           AUTHINFO                          NAMESPACE
*         aws-production   cluster.example.com   cluster.example.com       aws-production

И это результат выполнения этого шага: enter image description here

Как решить эту проблему?Можно ли вообще использовать пространства имен, используя упомянутый плагин?Если нет, то есть ли альтернативный способ добиться переключения контекста + пространства имен на этапе конвейера Jenkins?

РЕДАКТИРОВАТЬ: кажется, что добавление записи в .kube / config на машине Jenkins не помогает в этой проблеме.Этот плагин kubernetes-cli для Jenkins создает изолированный контекст и не заботится о .kube / config: (

Ручное принудительное конфигурирование, в этом случае тоже не помогает;

kubectl config use-context aws-production --namespace=aws-production --kubeconfig=/home/jenkins/.kube/config

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Благодаря помощи официального IRC-канала Jenkins, решение ниже.

Решение: Вы должны передать необработанный файл .kube / config в виде credentialsId.

  1. Создать новыйверительные грамоты в Дженкинс.Я использовал опцию Секретный файл.
  2. Загрузите желаемый файл .kube / config и дайте ему имя / идентификатор в форме создания учетных данных.
  3. Передайте имя идентификатора, которое вы дали этому ресурсу учетных данных,credentialsId поле

withKubeConfig ([credentialsId: 'file-aws-config', [..]]) ... ... 1016 *

0 голосов
/ 17 февраля 2019

Плагин не имеет параметра namespace, а ~/.kube/config.Таким образом, вы можете создать 2 контекста для обработки двух разных пространств имен.В вашем ~ / .kube / config`

contexts:
- context:
    cluster: k8s.mycluster
    namespace: mynamespace1
    user: k8s.user
  name: clusternamespace1
- context:
    cluster: k8s.mycluster
    namespace: mynamespace2
    user: k8s.user
  name: clusternamespace2
...