karlmdavis.jenkins2
Роль Ansible для Jenkins 2+
Эта роль Ansible может быть использована для установки и управления Jenkins 2.
Требования
Эта роль требует Ansible версии 2.4 или выше, с включенной функциональностью Ansible pipelining или доступной командой setfacl на управляемой системе (в соответствии с Переходом на пользователя без привилегий).
Роль на данный момент поддерживает Ubuntu 14.04 (Trusty) и Ubuntu 16.04 (Xenial), однако мы приветствуем участия по поддержке других платформ!
Переменные роли
Эта роль поддерживает следующие переменные, указанные здесь с их значениями по умолчанию из defaults/main.yml:
jenkins_release_line:'weekly'- Если установлено в
long_term_support, роль установит LTS релизы Jenkins. - Если установлено в
weekly, роль установит еженедельные релизы Jenkins.
- Если установлено в
jenkins_release_update:true- Если
true, пакет Jenkins (YUM, APT и т.д.) будет обновлен до последней версии при выполнении этой роли.
- Если
jenkins_home:/var/lib/jenkins- Директория, в которой будет храниться (большинство) данных Jenkins.
- Из-за ограничений установщика Jenkins, учетная запись сервиса
jenkinsвсе равно будет использовать значение по умолчанию в качестве домашней директории. Это особенно важно для SSH ключей.
jenkins_port:8080- Порт, на котором будет работать Jenkins для HTTP запросов.
- На большинстве систем это значение должно быть больше 1024, так как Jenkins не работает под пользователем
root.
jenkins_context_path:''- Контекстный путь, по которому будет размещен Jenkins, например,
/fooвhttp://localhost:8080/foo. Оставьте как'', чтобы разместить на корневом пути.
- Контекстный путь, по которому будет размещен Jenkins, например,
jenkins_url_external:''- Внешний URL, который пользователи будут использовать для доступа к Jenkins. Устанавливается в конфигурации Jenkins и используется в электронных письмах, вебхуках и т.д.
- Если это значение оставить пустым или None, конфигурация не будет установлена, и Jenkins попытается автоматически определить URL (что не сработает корректно, если он находится за прокси).
jenkins_admin_username: (не определено)- Если определены
jenkins_admin_usernameиjenkins_admin_password, то оба должны быть определены. - Переопределите эту переменную, чтобы указать учетные данные администратора Jenkins, которые должны использоваться для каждой возможной области безопасности.
- Если оставить неопределенной, роль попытается использовать анонимную аутентификацию.
- Обратите внимание, что роль автоматически обнаружит, если Jenkins настроен на разрешение анонимной аутентификации (как это происходит сразу после установки) и обработает это соответствующим образом.
- Если определены
jenkins_admin_password: (не определено)- Если определены
jenkins_admin_usernameиjenkins_admin_password, то оба должны быть определены. - Переопределите эту переменную, чтобы указать учетные данные администратора Jenkins, которые должны использоваться для каждой возможной области безопасности.
- Если определены
jenkins_session_timeout:30- Количество минут, прежде чем сессии Jenkins истекут, т.е. как долго авторизации будут действительными.
- Значение по умолчанию — 30 минут.
- Может быть установлено в
0, чтобы никогда не истекало.
jenkins_plugins_extra:[]- Переопределите эту переменную, чтобы установить дополнительные плагины Jenkins.
- Эти плагины будут добавлены к плагинам, рекомендованным новым мастером настройки Jenkins 2, которые автоматически устанавливаются этой ролью (см.
jenkins_plugins_recommendedв defaults/main.yml).
jenkins_plugins_timeout:60- Количество времени (в секундах), прежде чем установка/обновление плагина будет признано неудачным. Это значение передается параметру тайм-аута в модуле
jenkins_plugin. (Подробнее см. тут: http://docs.ansible.com/ansible/latest/jenkins_plugin_module.html#options.)
- Количество времени (в секундах), прежде чем установка/обновление плагина будет признано неудачным. Это значение передается параметру тайм-аута в модуле
jenkins_plugins_update:true- Если
true, плагины Jenkins будут обновлены при выполнении этой роли. (Обратите внимание, что отсутствующие плагины всегда будут установлены.)
- Если
jenkins_java_args_extra:''- Дополнительные параметры, которые будут добавлены к
JAVA_ARGSдля процесса Jenkins, такие как настройки памяти JVM, например,-Xmx4g.
- Дополнительные параметры, которые будут добавлены к
jenkins_http_proxy_server,jenkins_http_proxy_port,jenkins_http_proxy_no_proxy_hosts: (все неопределены)- Эти параметры выполняют ту же функцию, что и системные свойства JVM
http.proxyHost,http.proxyPortиhttp.nonProxyHosts, за исключением того, что настройки будут использоваться как для HTTP, так и для HTTPS запросов. - В частности, эти параметры будут использованы для настройки:
- Свойств системы Jenkins JVM
http.proxyHost,http.proxyPort,https.proxyHost,https.proxyPortиhttp.nonProxyHosts, как задокументировано в Java Networking and Proxies. - Специфических для Jenkins настроек прокси (которые требуют некоторые плагины, такие как GitHub плагин), как задокументировано в JenkinsBehindProxy.
- Значение
jenkins_http_proxy_no_proxy_hostsдолжно быть списком, например,['localhost', 'example.com'].
- Свойств системы Jenkins JVM
- Эти параметры выполняют ту же функцию, что и системные свойства JVM
Зависимости
Эта роль не имеет прямых зависимостей от других ролей Ansible. Однако она требует, чтобы JRE Java была доступна в системном пути.
Пример плейбука
Эту роль можно установить следующим образом:
$ ansible-galaxy install karlmdavis.jenkins2
Эту роль можно применить следующим образом:
- хосты: some_box
задачи:
- import_role:
name: karlmdavis.ansible-jenkins2
vars:
jenkins_plugins_extra:
- github-oauth
Запуск Groovy скриптов для настройки Jenkins
После установки Jenkins, можно запускать Groovy скрипты через Ansible для дальнейшей настройки Jenkins.
Например, вот как установить Jenkins и затем настроить его для использования HudsonPrivateSecurityRealm, для локальных аккаунтов Jenkins:
- хосты: some_box
задачи:
- import_role:
name: karlmdavis.ansible-jenkins2
vars:
# Не будет требоваться при первом запуске, но будет на предыдущих запусках (после
# включения безопасности, как указано ниже).
jenkins_admin_username: test
jenkins_admin_password: supersecret
# Убедитесь, что Jenkins перезапустился, если это необходимо.
- meta: flush_handlers
# Настройка безопасности для использования локальных аккаунтов Jenkins.
- name: Настроить безопасность
jenkins_script:
url: "{{ jenkins_url_local }}"
user: "{{ jenkins_dynamic_admin_username | default(omit) }}"
password: "{{ jenkins_dynamic_admin_password | default(omit) }}"
script: |
// Это базовые импорты, которые интерактивная консоль скриптов Jenkins
// включает автоматически.
import jenkins.*;
import jenkins.model.*;
import hudson.*;
import hudson.model.*;
// Настройка области безопасности, которая отвечает за аутентификацию.
def securityRealm = new hudson.security.HudsonPrivateSecurityRealm(false)
if(!securityRealm.equals(Jenkins.instance.getSecurityRealm())) {
Jenkins.instance.setSecurityRealm(securityRealm)
// Создайте пользователя для входа. Убедитесь, что пользователь связан
// с SSH ключом системного локального пользователя `jenkins`, чтобы обеспечить
// возможность использования этой учетной записи с CLI Jenkins.
def testUser = securityRealm.createAccount("test", "supersecret")
testUser.addProperty(new hudson.tasks.Mailer.UserProperty("[email protected]"));
testUser.save()
Jenkins.instance.save()
println "Изменена аутентификация."
}
// Настройка стратегии авторизации, которая определяет, кто может делать
// что.
def authorizationStrategy = new hudson.security.FullControlOnceLoggedInAuthorizationStrategy()
if(!authorizationStrategy.equals(Jenkins.instance.getAuthorizationStrategy())) {
authorizationStrategy.setAllowAnonymousRead(false)
Jenkins.instance.setAuthorizationStrategy(authorizationStrategy)
Jenkins.instance.save()
println "Изменена авторизация."
}
register: shell_jenkins_security
changed_when: "(shell_jenkins_security | success) and 'Changed' not in shell_jenkins_security.stdout"
Или скрипты Groovy могут быть сохранены как отдельные файлы и загружены с использованием lookup(...), как показано ниже:
- хосты: some_box
задачи:
- import_role:
name: karlmdavis.ansible-jenkins2
vars:
# Не будет требоваться при первом запуске, но будет на предыдущих запусках (после
# включения безопасности, как указано ниже).
jenkins_admin_username: test
jenkins_admin_password: supersecret
# Убедитесь, что Jenkins перезапустился, если это необходимо.
- meta: flush_handlers
# Настройка безопасности для использования локальных аккаунтов Jenkins.
- name: Настроить безопасность
jenkins_script:
url: "{{ jenkins_url_local }}"
user: "{{ jenkins_dynamic_admin_username | default(omit) }}"
password: "{{ jenkins_dynamic_admin_password | default(omit) }}"
script: "{{ lookup('template', 'templates/jenkins_security.groovy.j2') }}"
Лицензия
Этот проект свободен для использования и находится в общественном достоянии. Как указано в CONTRIBUTING:
Этот проект находится в общественном достоянии в пределах Соединенных Штатов, и авторские права и сопутствующие права на работу во всем мире отменены через CC0 1.0 Universal public domain dedication.
Все вклады в этот проект будут выпущены под CC0. Отправляя запрос на изменение, вы соглашаетесь с отказом от авторских прав.
Информация об авторе
Этот плагин был создан Карлом М. Дэвисом (https://justdavis.com/karl/).
ansible-galaxy install karlmdavis.jenkins2