#1 DevOps. Основы

Начнем с установки рабочего окружения. Что будет в нашей инфраструктуре?

  • 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