Jenkins Pipeline Kubernetes: динамически определяйте под-ямл - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь запустить тестовый образ докера в kubernetes, который проверит мое приложение. Контейнер приложения и тестовый контейнер имеют одну и ту же версию, которая увеличивается при изменении любого из тестов или приложения. Как я могу динамически определить pod yaml для плагина kubernetes, чтобы я мог получить версию на первом этапе (которая находится за пределами кластера kubernetes), а затем обновить pod yaml, указав правильную версию контейнера?

APP_VERSION = ""

pod_yaml = """
apiVersion: v1
kind: Pod
metadata:
  labels:
    some-label: ci--my-app
spec:
  containers:
  - name: test-runner
    image: my.docker.registry/app-tester:${-> APP_VERSION}
    imagePullPolicy: Always
    command:
    - cat
    tty: true
"""
pipeline {
  agent none
  stages {
    stage('Build and Upload') {
        agent { node { label 'builder' } }
        steps {

            script {
                APP_VERSION = sh(
                  script: "cat VERSION",
                  returnStdout: true
                  ).trim()
            }
        }
    }
    stage('Deploy and Test application') {
      agent {
        kubernetes {
          label 'ci--data-visualizer-kb'
          defaultContainer 'jnlp'
          yaml pod_yml
        }
      }
      steps {
        container('test-runner') {
          sh "echo ${APP_VERSION}"
          sh "ls -R /workspace"
        }
      }
    }        
  }
}

Блок kubernetes в конвейере не принимает отложенную оценку строки pod_yaml, которая содержит ${-> APP_VERSION}. Есть ли обходной путь для этого или я делаю это совершенно неправильно?

PS: я не могу использовать скриптовый конвейер по другим причинам. Итак, я должен придерживаться декларативного конвейера.

1 Ответ

0 голосов

Это может быть немного странно, но если у вас нет других вариантов, вы можете использовать jinja2 шаблонизатор и python для динамического создания нужного файла. Проверьте это - это довольно надежно.

...