Настройка 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.
В этом тексте есть код на языке YAML, он оставлен без перевода. Плагины](https://github.com/jenkinsci/docker#preinstalling-plugins)), обязательно включите плагин Configuration as Code (https://plugins.jenkins.io/configuration-as-code).
Во-вторых, плагин ищет переменную среды CASC_JENKINS_CONFIG. Переменная может указывать на любой из следующих вариантов:
Если CASC_JENKINS_CONFIG указывает на папку, плагин будет рекурсивно просматривать папку для поиска файла (с суффиксом .yml,.yaml,.YAML,.YML), но не содержит скрытых файлов или скрытых подкаталогов. Он не следует символическим ссылкам.
Если вы не установите переменную среды CASC_JENKINS_CONFIG, плагин по умолчанию будет искать отдельный файл конфигурации в $JENKINS_ROOT/jenkins.yaml.
/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
export PATH=$PATH:/path/to/apache-maven-x.y.z/bin
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 полностью запущен и работает
При настройке первого экземпляра 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}".
Мы можем предоставить эти исходные секреты следующими способами:
/run/secrets/${KEY}
будут заменены на ${KEY}
в конфигурации. Базовую папку /run/secrets
можно переопределить, установив переменную среды SECRETS
. Таким образом, это можно использовать как файловый секрет, а не только как docker-секрет./run/secrets/
, а затем имя файла можно использовать в качестве KEY. Например:apiVersion: v1
kind: Secret
metadata:
name: secret-name
data:
filename: {{ "encoded string" | b64enc }}
можно использовать так:
- credentials:
- string:
id: "cred-id"
secret: ${filename}
Предварительные условия:
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 не используется.)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, мы опубликовали JEP 201 в качестве предложения сделать это стандартным компонентом проекта Jenkins. Предложение было принято.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )