Плейбук 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] ********************************************************************
Задача: установить 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
$ sslgen <file>
Все ssl сертификаты будут созданы.
Подробности: https://github.com/devops-1212/python-sslgen
GitHub
GitHub - devops-1212/python-sslgen: Generate openssl certificates
Generate openssl certificates. Contribute to devops-1212/python-sslgen development by creating an account on GitHub.
У 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:
Если запустить виртуальную машину, df покажет
Для увеличения диска виртуальной машины достаточно запустить
Запустив виртуальную машину, расширение раздела произойдёт автоматически:
# 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
).Ansible плейбук для установки docker репозитория с аутентификацией и SSL
https://github.com/devops-1212/ansible-playbook-docker-registry
#ansible
#docker
https://github.com/devops-1212/ansible-playbook-docker-registry
#ansible
#docker
GitHub
GitHub - devops-1212/ansible-playbook-docker-registry: Install and configure docker registry with native basic authentication and…
Install and configure docker registry with native basic authentication and secure it using TLS - GitHub - devops-1212/ansible-playbook-docker-registry: Install and configure docker registry with na...
Devops Notes pinned «Всем привет! Делаю проект для #devops. Ищу devops профессионалов на интервью, которые работают с #jenkins, #gitlab pipeline, #ansible. Разговор займёт примерно 20-30 минут. Это не продажа. Если интересно, напишите мне пожалуйста в личные сообщения и я с вами…»
Переделал #ansible playbook для установки #kubectl.
Установка:
Playbook:
https://github.com/devops13242/ansible-role-kubectl
Установка:
ansible-galaxy role install devops13242.kubectl
Playbook:
- name: Install kubectl
hosts: all
roles:
- role: devops13242.kubectl
https://github.com/devops13242/ansible-role-kubectl
GitHub
GitHub - devops13242/ansible-role-kubectl: Ansible role to install kubectl
Ansible role to install kubectl. Contribute to devops13242/ansible-role-kubectl development by creating an account on GitHub.
Как создать несколько #virtualenv с #ansible разных версий для тестирования ansible role?
https://github.com/devops13242/ansible-virtualenv
---
- 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
GitHub
GitHub - devops13242/ansible-virtualenv
Contribute to devops13242/ansible-virtualenv development by creating an account on GitHub.