Невозможно получить переменные ENV в GoCD Kubernetes, используя конфигурацию YAML - PullRequest
0 голосов
/ 28 января 2020

GoCD Версия: 19.12.0

Я пытаюсь получить переменные среды, определенные в развертывании (системе) Kubernetes, в моей конфигурации GoCD YAML, чтобы пройти аутентификацию GitHub при извлечении ресурса. Я подтвердил, что могу вызвать хранилище с помощью персонального токена доступа . (через https: // [TOKEN] @ github.com / [COMPANY] / [REPO]. git)

Это, конечно, также работает, если я делаю то же самое для действительного поля YAML git.


Секреты GoCD в K8s:

apiVersion: v1
data:
  GITHUB_ACCESS_KEY: base64EncodedKey
kind: Secret
type: Opaque

Развертывание GoCD получает секреты:

...
spec:
  containers:
  - env:
   - name: GOCD_PLUGIN_INSTALL_kubernetes-elastic-agents
     value: https://github.com/gocd/kubernetes-elastic-agents/releases/download/v3.4.0-196/kubernetes-elastic-agent-3.4.0-196.jar
   - name: GOCD_PLUGIN_INSTALL_docker-registry-artifact-plugin
     value: https://github.com/gocd/docker-registry-artifact-plugin/releases/download/v1.1.0-104/docker-registry-artifact-plugin-1.1.0-104.jar
   - name: GITHUB_ACCESS_KEY
     valueFrom:
       secretKeyRef:
         key: GITHUB_ACCESS_KEY
         name: gocd-server
...

Я выполнил c 'd' в модуле и повторил переменную, которая возвращает декодированное значение.


YAML:

format_version: 9
pipelines:
  db-docker-build:
    group: someGroup
    label_template: ${COUNT}-${git[:8]}
    lock_behavior: unlockWhenFinished
    display_order: 1
    materials:
      git:
        git: 'https://$GITHUB_ACCESS_KEY@github.com/[COMPANY]/[REPO].git'
        shallow_clone: true
        auto_update: true
        branch: master
...

Я бы половину ожидать, что это сработает, но это не так, на самом деле оно просто получает $GITHUB_ACCESS_KEY в качестве значения. Задания, определенные на этапах конвейера, выполняются с использованием модуля агента elasti c, в котором также определены требуемые секреты. Я пробовал несколько


Установка переменных env -

environment_variables: GIT_KEY: ${GITHUB_ACCESS_KEY}

и затем использование этой переменной

git: 'https://$GIT_KEY@github.com/[COMPANY]/[REPO].git'

Установка переменных env и нет кавычки -

environment_variables: GIT_KEY: ${GITHUB_ACCESS_KEY}

и затем с использованием этой переменной

git: https://${GIT_KEY}@github.com/[COMPANY]/[REPO].git

без кавычек - git: https://$GITHUB_ACCESS_KEY@github.com/[COMPANY]/[REPO].git


без кавычек в скобках - git: https://${GITHUB_ACCESS_KEY}@github.com/[COMPANY]/[REPO].git


Я видел из некоторой документации YAML , что рекомендуется использовать encrypted_password для пароля GitHub, но это кажется ненужным, поскольку GUI скрывает токен и что он бежит в Куберне с секретами.

1 Ответ

0 голосов
/ 29 января 2020

Команда и я исследовали это немного дальше и нашли обходной путь. Большинство вопросов и статей объясняют, что написано в документах , что для получения переменных вам действительно необходим доступ к bin\bash -c.

Создатель плагинов YAML также использует безопасные зашифрованные переменные. хранить конфиденциальные данные , что хорошо, но для нашей команды это означает, что многие функции Kubernetes не используются.


Обходной путь:

Используйте GUI чтобы создать конвейер в GoCD, введите ссылку GitHub , добавьте имя пользователя и личный токен доступа для пользователя в качестве пароля, протестируйте соединение в порядке. После создания go до Admin -> Pipelines и нажмите Загрузить конфигурацию конвейера и выберите YAML.

Сгенерированный YAML имеет токен, зашифрованный как с GoCD закрытый ключ сервера.

...