Upgrade to Pro — share decks privately, control downloads, hide ads and more …

На пути к IaC: Администрирование Jenkins

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on. →

На пути к IaC: Администрирование Jenkins

Avatar for Denis Kanashin

Denis Kanashin

September 21, 2017

Other Decks in Programming

Transcript

  1. Зачем что-то менять? • Появляется потребность в дополнительных инстансах Jenkins

    • Состояние сервера – произведение искусства • Инструкция по установке почти сразу устаревает • Нет повторяемости установки • Изменения в конфигурации jenkins не отслеживаются • Обновление плагинов производится «на удачу» • Минимизация работы с Web-интерфейсом 3
  2. 4

  3. Цикл обновлений  Обновление версий всех* плагинов каждые 2 недели.

     Обновление версии Jenkins по мере выхода LTS версий. * - кроме зафиксированных 5
  4. Jenkins High Availability Master – Сервер с запущенным Jenkins. Standby

    – Сервер, готовый запустить Jenkins в случае проблем с мастером. Jenkins Linux Agent – Сервер, выполняющий задания, генерируемые в Jenkins. NFS – Сервер, предоставляющий NFS каталог, в котором хранится JENKINS_HOME общий для Master и Standby. 6
  5. Jenkins High Availability Master – Сервер с запущенным Jenkins. Standby

    – Сервер, готовый запустить Jenkins в случае проблем с мастером. NFS-1 и NFS-2 – Серверы, имеющие общий IP адрес (keepalived), и синхронизирующие между собой разделы с JENKINS_HOME с помощью GlusterFS. 7
  6. Окружения  Несколько рабочих окружений  Еще больше тестовых окружений

    + динамические ± NFS сервер ± JENKINS_HOME на NFS ± NGINX (SSL) ± Pacemaker ± Агенты мониторинга 10
  7. Запуск плейбука export CI_ENVIRONMENT_NAME = stage ansible-galaxy install -r -f

    requirements/$CI_ENVIRONMENT_NAME.yml ansible-playbook -i environments/$CI_ENVIRONMENT_NAME playbooks/site.yml 14
  8. Ansible роли  Роли для конфигурирования компонентов  Роли загружаются

    динамически (requirements.yml)  Роли обязательно тестируются  Следование Ansible Best Practice 15
  9. Тестирование ролей 1. Проверка ansible-lint 2. Проверка на разных дистрибутивах

    ОС 3. Проверка на идемпотентность 4. Проверка со значениями по умолчанию 5. Проверка произвольных переменных 16
  10. Ansible роль jenkins  Подключение к приватному серверу обновлений 

    Плагины (установка, удаление)  Агенты (SSH, JNLP)  Учетные записи, роли и права (active-directory, role-strategy)  Credentials  Tools  Глобальные параметры  Системное сообщение  Глобальные переменные  Список разрешенных методов (script-security)  Плагины:  mailer  audit_trail  … 17
  11. Описание подключения к приватному серверу обновлений jenkins_update_center_url: "http://server/juseppe" jenkins_update_center_id: "juseppe"

    jenkins_update_center_cert: | -----BEGIN CERTIFICATE----- MIIDZTCCAk2gAwIBAgKUtvytkVBYGkubyvDGCSqGSIb3DQEBBQU AMEkxCzAJBgNV KgYCG4b3rzBH67igBryujOiubKHButf57FTHKdR2lah3qt+w1JQVH4ct vCpxjmRVcyPYkO XHJ8hsP7qnqw -----END CERTIFICATE----- 18
  12. Описание Credentials vault_jenkins_credentials: - type: "ssh_with_passphrase" scope: "global" id: "GROUP1

    linux agents ssh key" username: "jenkins" private_key_source_type: "direct_entry" private_key_source_data: | -----BEGIN RSA PRIVATE KEY----- MIIEpQIBAklbhBJLJHNVtkyvunyub6gvJHV0zFisfEulUp4Obv8569+N4 …. j/dSXGCbgHllIppHKJNyKHVKUHGVkbtuhCFERYk1OpXU4KCfjxF0= -----END RSA PRIVATE KEY----- private_key_passphrase: "" description: "GROUP1 linux agents" domain: "GROUP1_DOMAIN" 20
  13. Описание агентов jenkins_slaves: - name: ‘GROUP1-linux-01' managed: yes home: '/home/jenkins'

    executors: 2 usage: NORMAL labels: linux java launcher: ssh launcher_ssh_host: 10.20.30.40 launcher_ssh_credentials_id: ‘GROUP1 linux agents ssh key‘ - name: ‘GROUP1-windows-01' managed: yes home: 'D:\\jenkins_slave' labels: windows launcher: jnlp usage: NORMAL 21
  14. Описание подключения к AD jenkins_plugin_active_directory: domain: "domain.name" site: "" server:

    "" bindName: "DOMAIN\\USER" bindPassword: "{{ vault_jenkins_ad_password }}" groupLookupStrategy: 'RECURSIVE' removeIrrelevantGroups: yes 22
  15. Описание ролей jenkins_plugin_role_strategy: roles: - name: "GROUP1_BUILD_ROLE" pattern: "GROUP1/.*" scope:

    'project' permissions: - hudson.model.Item.Cancel - hudson.model.Item.Read - hudson.model.Item.Build members: - user1 - user2 - user3 23
  16. Описания tool’ов jenkins_tools: custom: - name: 7zip installers: - type:

    archive label: windows url: 'http://server/files/jenkins/tools/7z1604-x64.zip‘ jdk: - name: jdk8_lin home: /usr/java/jdk1.8.0_144/ ansible: - name: ansible home: /usr/bin 24
  17. Конфигурация Jenkins - name: Tools - Copy configuration template to

    jenkins server template: src: 'configure_tools.groovy.j2' dest: "{{ jenkins_temp_config_directory_path }}/configure_tools.groovy" owner: root group: root mode: 0660 - name: Tools - Apply config shell: > java -jar {{ jenkins_home }}/jenkins-cli.jar -s {{ jenkins_instance_url }}/ groovy = < {{ jenkins_temp_config_directory_path }}/configure_tools.groovy --username $user --password $password environment: user: "{{ jenkins_admin_username }}" password: "{{ jenkins_admin_password }}" Шаблонизация groovy скрипта Выполнение groovy кода через jenkins-cli 25
  18. Pipeline ↑ - ansible-lint 26 ↑ - Тестовые окружения ↑

    - Рабочие окружения ↑ - Прочее
  19. Мониторинг  Сбор метрик – Prometheus +  node 

    JMX  graphite  nginx_vts  Сбор логов – NXLog + ELK exporters 28
  20. Что дальше?  Версионирование среды (ОС)  Автомасштабирование количества агентов

     Расширение тест-кейсов ansible ролей  Разбить настройку компонентов Jenkins на Ansible модули 29