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/ansible-role-jenkins2