Этот репозиторий был создан с целью решения тестового задания...
Развернуть Jenkins и Gitea в контейнерах при помощи ansible-playbook
Все выполняется на Win 10 под WSL 2 Ubuntu-24.04
PS C:\Users\marov> wsl --version
Версия WSL: 2.3.26.0
Версия ядра: 5.15.167.4-1
Версия WSLg: 1.0.65
Версия MSRDC: 1.2.5620
Версия Direct3D: 1.611.1-81528511
Версия DXCore: 10.0.26100.1-240331-1435.ge-release
Версия Windows: 10.0.19045.5131
PS C:\Users\marov> wsl -l
Дистрибутивы подсистемы Windows для Linux:
Ubuntu-24.04 (по умолчанию)Сразу стоит уточнить, что в задании не указано, что сервисы должны быть настроены и работать, поэтому будет рассмотрена обыкновенная установка.
- Вначале устанавливается docker.
- name: Install Docker
apt:
name:
- docker.io
- docker-compose
state: present
update_cache: true- Затем запускается docker.
- name: Start Docker
service:
name: docker
state: started
enabled: true- Загружается докер-образ Jenkins.
- name: Pull Jenkins
docker_image:
name: jenkins/jenkins:lts
source: pull- Создается хранилище для Jenkins.
- name: Create Jenkins volume
docker_volume:
name: jenkins_home- Запускается контейнер jenkins.
- name: Run Jenkins
docker_container:
name: jenkins
image: jenkins/jenkins:lts
ports:
- "8080:8080"
- "50000:50000"
volumes:
- jenkins_home:/var/jenkins_home- Создается папка(директорию) под Gitea.
- name: Create directory for Gitea
file:
path: /opt/gitea
state: directory
mode: '0755'- Копируется готовый docker compose файл в созданную папку
- name: Copy docker-compose.yml for Gitea
copy:
dest: /opt/gitea/docker-compose.yml
content: |
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.22.3
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "2221:22"- Запускается Gitea
- name: Run Gitea with Docker Compose
docker_compose:
project_src: /opt/gitea
state: present- Еще написаны handler'ы на всякий случай, в этом задании они не нужны
handlers:
- name: Restart Gitea
docker_compose:
project_src: /opt/gitea
state: restarted
- name: Restart Jenkins
docker_container:
name: jenkins
state: restartedПримечание. Установить docker используя ansible можно было бы и по-другому
- name: Install required system packages
apt:
pkg:
- apt-transport-https
- ca-certificates
- software-properties-common
state: latest
update_cache: true
- name: Add Docker GPG apt Key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Add Docker Repository
apt_repository:
repo: deb https://download.docker.com/linux/ubuntu {{ubuntu_ver}} stable
state: present
- name: Update apt and install docker-ce
apt:
pkg:
- docker-ce
- docker-compose
state: latest
update_cache: true
- name: Add remote "{{ username }}" user to "docker" group
user:
name: "{{ username }}"
groups: docker
append: yesРазберемся в том, что происходит:
1. Устанавливаются необходимые системные пакеты для работы с Docker
2. Добавляется официальный GPG-ключ Docker
3. Добавляется официальный репозиторий Docker для Ubuntu "нужной" версии
4. Устанавливается docker
5. Добавление "нужного" пользователя в группу docker
Под "нужным" я имею ввиду те значения, которые будут указаны в vars.
Вопрос: Почему я не использую способ выше?
Ответ: А зачем, если задание выполняется на моей машине, где я знаю, что все это уже выполнено?
Развернуть стека мониторинга prometheus+nodeexporter+cadvisor
Используя готовую роль развернуть Grafana. Удостовериться в работоспособности дашборда. Добавить все файлы плейбука в репозиторий Github в каталог Grafana.
Настроить один из вариантов SSHing Shim docs, чтобы можно было склонировать репозиторий используя SSH.
В инстансе Gitea, создать организацию "practice" в который разместить следующий репозиторий, все коммиты должны быть перенесены в новый репозиторий. Репозиторий назвать: NewCreate.
- Создать организацию Тестовая в Jenkins и настроить интеграцию с Gitea организации practice
- Добавить в репозиторий NewCreate Jenkinsfile, который будет собирать проект (выполняет mvn package)
- Запустить сканирование организации practice в Jenkins. Убедиться, что NewCreate собирается
- Написать Dockerfile, который запускает nginx и при обращении к localhost:8085 выдает страницу с приветствие "Добрый день! Это тестовое задание для меня было отличным шагом!". Разместить Dockerfile и файл index.html в GitHub в каталоге nginx.
- Поднять инстанс с артефакторием Nexus. Удалить стандартные репозитории и настроить proxy-репозиторий для pypi. Название для proxy-репозитория указать: test-proxy
- Поднять воркер(агент) для Jenkins и подключить к существующему инстансту.
- Написать скрипт на bash который на вход получает текстовый файл и выводит строки в которых есть слово testbash на экран и в дальнейшем формировует новый файл из всех найденных строк и подсчитывает это количество строк и также записывает в файл. Разместить скрипт в GitHub в каталоге bash
- Создать нового пользователя в Linux и добавить его в группу sudo, настроить выполнение sudo без пароля
- Просмотреть основные характеристики машины Linux: объем ОЗУ, количество ядер, объем HDD, файловую систему томов, релиз дистрибутива Linux