Devops Notes
2 subscribers
8 links
Download Telegram
Channel created
Channel name was changed to «Devops Notes»
Плейбук Ansible для установки Jenkins с docker

Задача: установить Jenkins с docker используя плейбук Ansible.

Ansible playbook будет выполнять следующие шаги:

Первый шаг: запустим apt update для получения инфрмации о доступных версиях пакетов.
Второй шаг: установим docker.
Третий шаг: запустим jenkins контейнер.

Для удобства, все шаги мы вынесем в различные ansible roles. Первый шаг будет system role, второй шаг - docker role, третий шаг - jenkins role.
system role

Файл roles/system/tasks/main.yml:

- name: Update and upgrade apt packages
become: true
become_user: root
apt:
upgrade: "yes"
update_cache: true

Здесь мы используем ansible apt module с параметрами:

update_cache: true - указывает ansible выполнить apt-get update.
upgrade: "yes" - запускается aptitude safe-upgrade.

docker role

Файл roles/docker/tasks/main.yml:

- name: Install docker package
become: true
become_user: root
package: name={{ item }} state=present
with_items:
- docker.io

- name: Start Docker Service
become: true
become_user: root
service: name=docker state=started enabled=yes

Package module устанавливает docker.io пакет.

Service module запускает docker сервис и добавляет его в автозапуск.
jenkins role

Файл roles/jenkins/tasks/main.yml:

- name: Create jenkins home directory
become: true
become_user: root
ansible.builtin.file:
path: /opt/jenkins
state: directory
owner: '1000'
group: '1000'
recurse: true

- name: Install python3-docker package
become: true
become_user: root
package: name={{ item }} state=present
with_items:
- python3-docker

- name: Create jenkins container
become: true
become_user: root
docker_container:
container_default_behavior: no_defaults
name: jenkins
image: jenkins/jenkins:jdk17
state: started
ports:
- '0.0.0.0:8080:8080'
- '0.0.0.0:50000:50000'
restart_policy: always
volumes:
- /opt/jenkins:/var/jenkins_home

ansible.builtin.file module создаёт /opt/jenkins директорию. Директория будет использоваться для хранения всей конфигурации jenkins и jenkins jobs. Мы её будем подключать в jenkins контейнер.

Package устанавливает python3-docker deb пакет - docker_container module использует python3-docker для запуска jenkins контейнера.

Docker_container запускает jenkins контейнер. Параметры:

container_default_behavior: no_defaults - в разных версиях параметры модуля имеют разные значения по умолчанию. Значение no_defaults указывает не использовать старые значения по умолчанию.
ports - проброс портов с Jenkins контейнера на хост.
restart_policy: always - политика перезапуска контейнера, применяемая при окончании его работы.
volumes - список томов для монтирования в контейнер.

Playbook

Файл jenkins.yml:

- name: Install jenkins
hosts: all
remote_user: ubuntu

roles:
- system
- docker
- jenkins

hosts: all - правила будут выполняться для всех хостов.
remote_user: ubuntu - учетная запись пользователя для SSH-соединения.
roles - список roles для выполнения.

Запуск

Для запуска playbook мы должны указать inventory файл - список хостов для запуска. Например:

[all]
10.5.0.162

Запускаем playbook:

$ ansible-playbook -i hosts jenkins.yml

PLAY [Install jenkins] ************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************
ok: [10.5.0.162]

TASK [system : Update and upgrade apt packages] ***********************************************************************
changed: [10.5.0.162]

TASK [docker : Install docker package] ********************************************************************************
changed: [10.5.0.162] => (item=docker.io)

TASK [docker : Start Docker Service] **********************************************************************************
ok: [10.5.0.162]

TASK [jenkins : Create jenkins home directory] ********************************************************************
Сделал утилиту для генерации ssl сертификатов. Пишем конфигурацию всех сертификатов в один файл и запускаем

$ sslgen <file>

Все ssl сертификаты будут созданы.

Подробности: https://github.com/devops-1212/python-sslgen
У Fedora Cloud Base image https://download.fedoraproject.org/pub/fedora/linux/releases/39/Cloud/x86_64/images/Fedora-Cloud-Base-39-1.5.x86_64.qcow2 размер виртуального диска 5G:

# qemu-img info Fedora-Cloud-Base-39-1.5.x86_64.qcow2 
image: Fedora-Cloud-Base-39-1.5.x86_64.qcow2
file format: qcow2
virtual size: 5 GiB (5368709120 bytes)
disk size: 519 MiB
cluster_size: 65536
Format specific information:
compat: 0.10
compression type: zlib
refcount bits: 16


Если запустить виртуальную машину, df покажет

$ df -Th /dev/sda5
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda5 btrfs 4.0G 461M 3.1G 13% /


Для увеличения диска виртуальной машины достаточно запустить qemu-img resize:

# cp Fedora-Cloud-Base-39-1.5.x86_64.qcow2 fedora-3.qcow2

# qemu-img resize fedora-3.qcow2 50G
Image resized.

# qemu-img info fedora-3.qcow2
image: fedora-3.qcow2
file format: qcow2
virtual size: 50 GiB (53687091200 bytes)
disk size: 1 GiB
cluster_size: 65536
Format specific information:
compat: 0.10
compression type: zlib
refcount bits: 16


Запустив виртуальную машину, расширение раздела произойдёт автоматически:

$ df -Th /dev/sda5
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda5 btrfs 49G 453M 49G 1% /


cloud-init запустит growpart /dev/sda 5 и btrfs filesystem resize --enqueue max / (смотри /var/log/cloud-init.log).
Всем привет!
Делаю проект для #devops.
Ищу devops профессионалов на интервью, которые работают с #jenkins, #gitlab pipeline, #ansible.
Разговор займёт примерно 20-30 минут.
Это не продажа.
Если интересно, напишите мне пожалуйста в личные сообщения и я с вами свяжусь.
Devops Notes pinned «Всем привет! Делаю проект для #devops. Ищу devops профессионалов на интервью, которые работают с #jenkins, #gitlab pipeline, #ansible. Разговор займёт примерно 20-30 минут. Это не продажа. Если интересно, напишите мне пожалуйста в личные сообщения и я с вами…»
Переделал #ansible playbook для установки #kubectl.

Установка:

ansible-galaxy role install devops13242.kubectl


Playbook:

- name: Install kubectl
hosts: all
roles:
- role: devops13242.kubectl


https://github.com/devops13242/ansible-role-kubectl
Как создать несколько #virtualenv с #ansible разных версий для тестирования ansible role?

---
- hosts: localhost
connection: local
tasks:
- name: Create virtualenv
ansible.builtin.pip:
name:
- ansible-core=={{item}}
- ansible-lint
- molecule
- molecule-plugins[podman]
- yamllint
virtualenv: ~/ansible-core-{{item}}
loop:
- 2.13.13
- 2.14.4
- 2.15.9
- 2.16.3


https://github.com/devops13242/ansible-virtualenv