1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/linuxsuren-configuration-as-code-plugin

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Jenkins Configuration as Code (a.k.a. JCasC) Plugin

Введение

Настройка Jenkins — сложный процесс, так как и сам Jenkins, и его плагины требуют настройки и конфигурации с десятками параметров, которые нужно установить в разделе веб-интерфейса «Управление».

Опытные пользователи Jenkins полагаются на скрипты инициализации Groovy для настройки Jenkins и обеспечения желаемого состояния. Эти скрипты напрямую вызывают API Jenkins и, таким образом, могут делать всё (на свой страх и риск). Но они также требуют знания внутренней структуры Jenkins и уверенности в написании скриптов Groovy поверх API Jenkins.

Плагин Configuration as Code был разработан как убедительный способ настроить Jenkins на основе файлов конфигурации, понятных человеку. Написание такого файла должно быть возможным без необходимости быть экспертом по Jenkins, просто переводя в код процесс настройки, который пользователь привык выполнять в веб-интерфейсе.

Этот плагин призван заменить описанную выше конфигурацию на основе пользовательского интерфейса текстовой конфигурацией, приведённой ниже.

jenkins:
  securityRealm:
    ldap:
      configurations:
        - groupMembershipStrategy:
            fromUserRecord:
              attributeName: "memberOf"
          inhibitInferRootDN: false
          rootDN: "dc=acme,dc=org"
          server: "ldaps://ldap.acme.org:1636"

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

Начало работы

Сначала запустите экземпляр Jenkins с установленным плагином Configuration as Code.

  • Те, кто запускает Jenkins как контейнер Docker, (и, возможно, также предварительно устанавливая…)*

В этом тексте есть код на языке YAML, он оставлен без перевода. Плагины](https://github.com/jenkinsci/docker#preinstalling-plugins)), обязательно включите плагин Configuration as Code (https://plugins.jenkins.io/configuration-as-code).

Во-вторых, плагин ищет переменную среды CASC_JENKINS_CONFIG. Переменная может указывать на любой из следующих вариантов:

  • путь к папке, содержащей набор файлов конфигурации. Например, /var/jenkins_home/casc_configs;
  • полный путь к отдельному файлу. Например, /var/jenkins_home/casc_configs/jenkins.yaml;
  • URL-адрес, указывающий на файл, размещённый в сети. Например, https://acme.org/jenkins.yaml.

Если CASC_JENKINS_CONFIG указывает на папку, плагин будет рекурсивно просматривать папку для поиска файла (с суффиксом .yml,.yaml,.YAML,.YML), но не содержит скрытых файлов или скрытых подкаталогов. Он не следует символическим ссылкам.

Если вы не установите переменную среды CASC_JENKINS_CONFIG, плагин по умолчанию будет искать отдельный файл конфигурации в $JENKINS_ROOT/jenkins.yaml.

Запуск локально

Предпосылки: Java, Maven и IntelliJ IDEA

  1. Убедитесь, что доступна Java 8. Существуют нерешённые проблемы с Java 10/11 по состоянию на 24 октября 2018 года.
/usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home

Если по умолчанию выбрана Java 11, проверьте другие доступные версии Java ниже.

/usr/libexec/java_home --verbose
Совпадающие виртуальные машины Java (3):
    11.0.1, x86_64: «Java SE 11.0.1» /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home
    10.0.2, x86_64: «Java SE 10.0.2» /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
    1.8.0_192, x86_64:  «Java SE 8» /Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home

Используйте альтернативную Java 8.

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home
  1. Убедитесь, что Maven включён в переменную окружения PATH.
export PATH=$PATH:/path/to/apache-maven-x.y.z/bin

IntelliJ IDEA

  1. Откройте корневой каталог этого проекта в IntelliJ IDEA.
  2. Если вы открываете его впервые, терпеливо дождитесь загрузки зависимостей проекта.
  3. Нажмите «Выполнить» в меню. Выберите «Редактировать конфигурации» в пункте меню.
  4. Нажмите «Добавить новую конфигурацию» («+») в левом верхнем углу показанного диалогового окна. Выберите Maven.
  5. На вкладке «Параметры» группа «Рабочий каталог:» — это /path/to/configuration-as-code-plugin/plugin.
  6. На вкладке «Параметры» группа «Командная строка:» — hpi:run.
  7. Убедитесь, что IntelliJ IDEA не использует встроенный maven.
    • Нажмите «Файл» → «Настройки...» → «Сборка, выполнение, развёртывание» → «Инструменты сборки» → «Maven».
    • «Домашний каталог Maven:» имеет значение /path/to/apache-maven-x.y.z, а не «Bundled (Maven 3)».
  8. Откройте http://localhost:8080/jenkins/configuration-as-code/, чтобы протестировать плагин локально.

CLI

  1. Перейдите в подкаталог plugin под корневым каталогом этого проекта.
  2. Используйте следующие команды.
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
export PATH=$PATH:/path/to/apache-maven-x.y.z/bin
mvn hpi:run
...
INFO: Jenkins полностью запущен и работает
  1. Откройте http://localhost:8080/jenkins/configuration-as-code/, чтобы протестировать плагин локально.

Начальная конфигурация

При настройке первого экземпляра Jenkins просмотрите примеры, показанные в каталоге demos этого репозитория. Если у вас есть плагин, у которого нет примера, обратитесь к справочному документу справки. Нажмите ссылку «Документация» внизу страницы «Конфигурация как код».

Если вы хотите настроить конкретный плагин, найдите имя плагина на странице. Страница покажет вам, какой корневой элемент принадлежит конфигурации. Большинство установленных плагинов... Конфигурационный файл Jenkins

Этот конфигурационный файл включает корневые записи для различных компонентов вашей основной установки Jenkins. Элемент jenkins предназначен для корневого объекта Jenkins, а другие — для различных элементов глобальной конфигурации.

jenkins:
  securityRealm:
    ldap:
      configurations:
        - groupMembershipStrategy:
            fromUserRecord:
              attributeName: "memberOf"
          inhibitInferRootDN: false
          rootDN: "dc=acme,dc=org"
          server: "ldaps://ldap.acme.org:1636"

  nodes:
    - permanent:
        name: "static-agent"
        remoteFS: "/home/jenkins"
        launcher:
          jnlp:

  slaveAgentPort: 50000
  agentProtocols:
    - "jnlp2"
tool:
  git:
    installations:
      - name: git
        home: /usr/local/bin/git
unclassified:
  mailer:
    adminAddress: admin@acme.org
    replyToAddress: do-not-reply@acme.org
    # Note that this does not work right now
    #smtpHost: smtp.acme.org
    smtpPort: 4441
credentials:
  system:
    domainCredentials:
      credentials:
        - certificate:
            scope: SYSTEM
            id: ssh_private_key
            keyStoreSource:
              fileOnMaster:
                keyStoreFile: /docker/secret/id_rsa

Также см. папку demos с различными примерами.

Документация

Формат файла конфигурации зависит от версии jenkins-core и установленных плагинов. Документацию можно создать на основе живого экземпляра, а также схемы JSON, которую можно использовать для проверки файла конфигурации с помощью ваших любимых инструментов YAML.

Работа с секретами

В настоящее время вы можете предоставить исходные секреты JCasC, которые все полагаются на подстановку строк в конфигурации вида <ключ, значение>. Например, Jenkins: "${some_var}". Также доступна подстановка по умолчанию с использованием оператора :- из bash. Например, key: "${VALUE:-defaultvalue}" будет равно defaultvalue, если $VALUE не задано. Чтобы экранировать строку от интерполяции секрета, поставьте ^ перед значением. Например, Jenkins: "^${some_var}" выдаст литерал Jenkins: "${some_var}".

Мы можем предоставить эти исходные секреты следующими способами:

  • Используя переменные среды.
  • Используя docker-secrets, где файлы по пути /run/secrets/${KEY} будут заменены на ${KEY} в конфигурации. Базовую папку /run/secrets можно переопределить, установив переменную среды SECRETS. Таким образом, это можно использовать как файловый секрет, а не только как docker-секрет.
  • Используя Kubernetes secrets, логика такая же, как и для docker-secrets. Секрет должен быть смонтирован как файл в /run/secrets/, а затем имя файла можно использовать в качестве KEY. Например:
apiVersion: v1
kind: Secret
metadata:
  name: secret-name
data:
  filename: {{ "encoded string" | b64enc }}

можно использовать так:

- credentials:
    - string:
      id: "cred-id"
      secret: ${filename}
  • Используя Vault, см. следующий раздел.

Vault

Предварительные условия:

  • Переменная среды CASC_VAULT_PW должна присутствовать, если токен не используется и appRole/Secret не используется. (Пароль Vault.)
  • Переменная окружения CASC_VAULT_USER должна быть установлена, если токен не используется, и appRole/Secret не используется. (Имя пользователя Vault.)
  • Должна присутствовать переменная среды CASC_VAULT_APPROLE. (ID AppRole Vault, если токен не используется и U/P не используются.)
  • Должна быть установлена переменная окружения CASC_VAULT_APPROLE_SECRET. (Секрет AppRole ID Vault, если токен не используется и U/P не используется.)
  • Если U/P не используется, должна присутствовать переменная окружения CASC_VAULT_TOKEN. (Токен Vault.)
  • Должна присутствовать переменная окружения CASC_VAULT_PATHS. (Пути к ключам Vault через запятую. Например, secret/jenkins,secret/admin.)
  • Должна присутствовать переменная окружения CASC_VAULT_URL. (URL Vault, включая номер порта.)
  • Необязательная переменная окружения CASC_VAULT_MOUNT. (Mount аутентификации Vault. Например, ldap или другая аутентификация по имени пользователя и паролю, по умолчанию — userpass.) Переведённый текст:

Переменные среды CASC_VAULT

Переменная среды CASC_VAULT_NAMESPACE является необязательной. Если она используется, то задаёт пространство имён Vault для корпоративных хранилищ.

  • Переменная среды CASC_VAULT_FILE также является необязательной и предоставляет способ чтения других переменных из файла вместо переменных среды.

  • Переменная среды CASC_VAULT_ENGINE_VERSION является необязательной. Если её значение не установлено, предполагается, что путь к хранилищу использует версию kv 2. Если путь к хранилищу использует версию движка 1, установите эту переменную в значение 1.

  • Выданный токен должен иметь доступ на чтение к пути хранилища auth/token/lookup-self, чтобы определить время его истечения. JCasC повторно выдаст токен, если срок его действия истёк (за исключением CASC_VAULT_TOKEN).

Если присутствуют переменные среды CASC_VAULT_URL и CASC_VAULT_PATHS, JCasC попытается собрать начальные секреты из Vault. Однако для правильной работы требуется аутентификация либо с помощью комбинации CASC_VAULT_USER и CASC_VAULT_PW, токена CASC_VAULT_TOKEN, либо с помощью сочетания CASC_VAULT_APPROLE и секрета CASC_VAULT_APPROLE_SECRET. У пользователя, прошедшего аутентификацию, должен быть как минимум доступ для чтения.

Вы также можете предоставить переменную среды CASC_VAULT_FILE, где вы загружаете секреты из файла.

Файл должен быть в формате Java Properties.

CASC_VAULT_PW=PASSWORD
CASC_VAULT_USER=USER
CASC_VAULT_TOKEN=TOKEN
CASC_VAULT_PATHS=secret/jenkins/master,secret/admin
CASC_VAULT_URL=https://vault.dot.com
CASC_VAULT_MOUNT=ldap

Хорошим вариантом использования CASC_VAULT_FILE будет использование вместе с секретами Docker.

version: "3.6"

services:
  jenkins:
    environment:
      CASC_VAULT_FILE: /run/secrets/jcasc_vault
    restart: always
    build: .
    image: jenkins.master:v1.0
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - jenkins-home:/var/jenkins_home
    secrets:
      - jcasc_vault

volumes:
  jenkins-home:

secrets:
  jcasc_vault:
    file: ./secrets/jcasc_vault

TODO: Предоставить Dockerfile для создания документации из указанного выпуска jenkins-core и плагинов.

Установка плагинов

Мы не поддерживаем установку плагинов с JCasC, вам нужно использовать что-то другое для этого.

Пользователи Docker могут использовать:
https://github.com/jenkinsci/docker/#preinstalling-plugins

Пользователи Kubernetes:
https://github.com/helm/charts/tree/master/stable/jenkins

Поддерживаемые плагины

Большинство плагинов должны поддерживаться «из коробки» или, возможно, потребовать некоторых минимальных изменений. См. эту панель мониторинга для известных проблем совместимости.

Запуск перезагрузки конфигурации

У вас есть следующие варианты запуска перезагрузки конфигурации:

  • через пользовательский интерфейс: Управление Jenkins -> Конфигурация -> Перезагрузить существующую конфигурацию

  • через HTTP POST на JENKINS_URL/configuration-as-code/reload Примечание: это должно включать действительный CRUMB и информацию об аутентификации, например, имя пользователя + токен пользователя с правами администратора. Начиная с Jenkins 2.96 CRUMB не требуется для токенов API.

  • через Jenkins CLI

  • через HTTP POST на JENKINS_URL/reload-configuration-as-code По умолчанию он отключён и защищён с помощью токена, настроенного как системное свойство casc.reload.token. Настройка системного свойства включает эту функцию, и запросы должны включать токен в качестве параметра запроса с именем casc-reload-token, т. е. JENKINS_URL/reload-configuration-as-code/?casc-reload-token=32424324rdsadsa.

    curl -X POST "JENKINS_URL:8080/reload-configuration-as-code/?casc-reload-token=32424324rdsadsa"

Предложение по улучшению Jenkins

Поскольку конфигурация как код продемонстрировала высокую востребованность в сообществе Jenkins, мы опубликовали JEP 201 в качестве предложения сделать это стандартным компонентом проекта Jenkins. Предложение было принято. :tada:

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/linuxsuren-configuration-as-code-plugin.git
git@api.gitlife.ru:oschina-mirror/linuxsuren-configuration-as-code-plugin.git
oschina-mirror
linuxsuren-configuration-as-code-plugin
linuxsuren-configuration-as-code-plugin
master