Начнем с установки рабочего окружения. Что будет в нашей инфраструктуре?
- Proxmox как система виртуализации
- Centos 7
- Gitlab для CI/CD
- Prometheus и Grafana для мониторинга
- Node Exporter
- Посмотрим на образы Selenium и Allure
После установки ОС сразу делаем snapshot, чтобы если что-то пошло не так, не пришлось переустанавливать (иногда вместо snapshot делают clone, но это дольше и скорее как вариант масштабирования).
Далее в Gitlab создадим репозиторий.
Create new project -> Create blank project
Задаем имя, например devopsstart, остальное я оставляю по-умолчанию, можете изменить на ваше усмотрение. Создаем проект.
Теперь займемся настройкой нашей VM.
Создадим пользователя для нашего проекта
Залогинимся под root
useradd devops // добавим пользователя devops
passwd devops // зададим пароль (devops123 так как проект учебный, на проде не надо так)
su devops // зайдем под новым пользователем
Далее зайдем под root и расширим права нашему пользователю
cd /etc/sudoers.d/
nano devops
devops ALL=(ALL:ALL) ALL
Сохраним, перелогинимся под devops и проверим
su devops
sudo ls /root
[sudo] password for devops:
anaconda-ks.cfg
Выключим машину и сделаем новый Snapshot
Установим git
sudo yum install git
Создадим в нашей домашней директории папку configs
mkdir configs
cd configs
Клонируем тестовый проект
git clone https://github.com/Guy-Incognito/simple-http-server.git
Теперь клонируем наш gitlab проект
Для начала создадим ssh ключи
ssh-keygen -t rsa
На Gitlab заходим в User Settings -> SSH Keys и добавляем наш публичный ключ
cat /home/devops/.ssh/id_rsa.pub // посмотреть ключ
Клонируем наш gitlab репозиторий через ssh
git clone git@gitlab.com:yourusername/devopsstart.git
Далее удаляем из devopsstart README и копируем все из папки simple-http-server
cd devopsstart/
rm README.md
cd ..
cp -R simple-http-server/* devopsstart/
cd devopsstart/
git status
git add *
git status
git config --global user.email "admin@devops.start"
git config --global user.name "admin devopstart"
git commit -m "added webserver"
git status
git push origin main
Проверяем на gitlab и видим файлы проекта
Теперь установим docker
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker
sudo docker run hello-world
Установим для примера Selenium
sudo docker run -d -p 4444:4444 -p 7900:7900 --shm-size="2g" selenium/standalone-chrome:latest
sudo docker ps // посмотреть запущенные контейнеры
sudo docker images // посмотреть доступные образы
sudo docker ps -a // посмотреть все контейнеры
sudo docker stop youthful_driscoll // остановим контейнер
sudo docker rm youthful_driscoll // удалим контейнер
Теперь добавим контейнеру имя selenium и сделаем так чтобы он автоматически перезапускался
sudo docker run --name selenium -d -p 4444:4444 -p 7900:7900 --shm-size="2g" --restart always selenium/standalone-chrome:latest
sudo docker exec -it selenium bash // подключимся внутрь нашего контейнера
CTRL + D // выход
Проверим, пройдем по адресу ip_address:4444
Теперь в папке devopsstart создадим папку какую мы будем подключать к контейнеру и простой index.html
mkdir webserver
cd webserver
nano index.html
<h1>Hello from devopslife.ru</h1>
cd ..
git status
git add *
git commit -m “added workdir”
git status
git push origin main
Dockerfile у нас уже есть, осталось собрать образ
sudo docker build . -t simple-http-server
sudo docker images
Проверим
sudo docker run --name webserver -d -v /home/devops/configs/devopsstart/webserver:/data -p 8080:8080 simple-http-server
sudo docker ps
Откроем ip_address:8080
Видим нашу страницу
Зайдем внутрь нашего контейнера
sudo docker exec -it webserver sh
Видим нашу папку и index.html
Теперь выйдем из контейнера через CTRL + D и посмотрим логи
sudo docker logs webserver
Теперь вернемся к gitlab
YourProject -> Settings -> CI/CD -> Runners
Сделаем свой runner
# Download the binary for your system
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
# Give it permission to execute
sudo chmod +x /usr/local/bin/gitlab-runner
# Create a GitLab Runner user
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
# Install and run as a service
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
sudo gitlab-runner register --url https://gitlab.com/ --registration-token YOUR_TOKEN
Если появляется
gitlab-runner: command not found
В /etc/sudoers нужно заменить
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
на
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
При выборе executor выбираем shell
Видим что на gitlab появился наш runner
Рассмотрим пример простого GitLab CI/CD pipeline
Code -> Repository -> New File -> назовем его .gitlab-ci.yml
build-job:
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
test-job1:
stage: test
script:
- echo "This job tests something"
test-job2:
stage: test
script:
- echo "This job tests something, but takes more time than test-job1."
- echo "After the echo commands complete, it runs the sleep command for 20 seconds"
- echo "which simulates a test that runs 20 seconds longer than test-job1"
- sleep 20
deploy-prod:
stage: deploy
script:
- echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
environment: production
Нажимаем Commit changes
Далее Build -> Pipelines
Здесь мы видим статус



Далее выполним
sudo usermod -aG docker gitlab-runner
sudo -u gitlab-runner -H docker info // проверим
Если интересно посмотрите самостоятельно про Sonarqube
Далее, для ознакомления, помимо Selenium установим ALLURE
sudo docker run -d -p 5050:5050 -e CHECK_RESULTS_EVERY_SECONDS=3 -e KEEP_HISTORY=1 \
-v "/$(pwd)/allure-results:/app/allure-results" \
-v "/$(pwd)/allure-reports:/app/default-reports" \
frankescobar/allure-docker-service
Проверим
ip_address:5050
Сейчас мы не рассматриваем подробно Selenium или Allure, просто хочется обратить внимание на интересные инструменты и показать как они запускаются
В следующем уроке рассмотрим установку мониторинга из Prometheus и Grafana