В этой статье я покажу вам, как создать простой конвейер для развертывания проекта Spring Boot на сервере с помощью GitHub Actions и Docker.

Содержание:

  1. Запись собственного раннера на VPS с установленной ОС Linux и Docker.

  2. Создание файла .yml, описывающего конвейер — базовую структуру, операции и команды. Создание статуса — бейджа.

  3. Оповещения в мобильном приложении GitHub.

Что у нас есть

  • Арендованный VPS с установленным Docker и docker-compose

  • Депозит База проекта Spring Boot с Dockerfile и docker-compose.yml

Настройка бегуна

Мы будем развертывать на сервере. Для этого нужно настроить раннер.

Подключиться к ВПС. Раннер нельзя запустить от имени пользователя root, поэтому вам нужно будет создать нового, не забыв дать ему разрешение на использование Docker.

Создание пользователя и предоставление разрешений для Docker
useradd -m user
paswwd user
groupadd docker
usermod -aG docker user
chsh -s /bin/bash user
su user

В репозитории перейдите к Настройки Акции Бегуны → Новый самостоятельный раннер

Указываем настройки для нашего VPS. У меня на линуксе. Архитектура процессора — x64. После этого появятся автоматически сгенерированные скрипты для настройки раннера.

0eaa1a144d5cb03ce977a6a46bb9a82d

Введите первую группу скриптов.

d6a501ef1511b4bfad2c3c7d4b18c0b2
358f8a456725a6b4062d7928473c8f91

Запустите скрипт установки. Из всех дефолтных поменял только имя раннера.

73b785eef82e0141e1b52fe59e8417f2
0466b28423f2495032f32f4283236b6d

Теперь вы можете запустить бегун. Я предпочитаю делать это в фоновом режиме с помощью нет.

  nohup ./run.sh > runner.logs &

Давайте проверим статус раннера в GitHub.

my-runner зарегистрирован и ожидает запуска задачи

my-runner зарегистрирован и ожидает запуска задачи

Создание трубопровода.

Все скрипты пайплайна должны находиться в специальной папке {проект}/.github/рабочие процессы.

Создадим скрипт развертывание-job.yml и поместите его в эту папку.

bc2d514df02000443ed6b177526afa0d

В первой строке укажите имя пайплайна. Он появится на GitHub.

name: Deploy buy runner

Затем мы указываем, когда запускать этот пайплайн — в нашем случае это будет пуш в ветку владелец Или развивать.

on:
  push:
    branches: [ "master", "develop" ]

Далее приступим к описанию вакансий.

ЧИТАТЬ   До конца года Украине придется выплатить МВФ 2,9 миллиарда долларов для обслуживания своего кредита.

Первое, что мы собираемся сделать, это запустить тесты.

jobs:
  test: # Название джобы
    runs-on: ubuntu-latest   # Где должна выполняться джоба. 
# Здесь укажем GitHub-hosted runner - среду выполнения, которую предоставляет сам GitHub.
    steps: # Перечень шагов, которые необходимо выполнить в рамках джобы.
      - name: cd into repo # Название шага
        uses: actions/checkout@v3 # Ключевое слово uses используется для запуска заранее
# созданного набора команд. В данном случае используем дефолтную команду
# для обновления проекта до последнего коммита.
      - name: set up Java and Maven # Настраиваем Java и Maven.
        uses: actions/setup-java@v3 
        with:
          java-version: '11'
          distribution: 'temurin'
          cache: maven
      - name: run tests
        run: mvn test # Запускаем тесты.

Далее подготовим среду — удалим старые контейнеры и образы.

  prepare-environment:
    runs-on: self-hosted # Запускаем на раннере, который настроили до этого.
    needs: test # Запускаем только если джоба test прошла успешно
    steps:
      - name: Stop and remove containers, networks
        run: docker-compose down
      - name: Remove unused data
        run: docker system prune -a -f

После этого запустим проект с помощью docker-compose.

  deploy:
    runs-on: self-hosted # Запускаем на раннере, который настроили до этого.
    needs: prepare-environment # Запускаем только если джоба prepare-environment прошла успешно
    steps:
      - name: checkout repo
        uses: actions/checkout@v3
      - name: docker-compose
        run: docker-compose up -d

Окончательный файл:

подать
name: Deploy buy runner

on:
  push:
    branches: [ "master", "develop" ]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: checkout repo
        uses: actions/checkout@v3
      - name: set up Java and Maven
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'temurin'
          cache: maven
      - name: run tests
        run: mvn test
  prepare-environment:
    runs-on: self-hosted
    needs: test
    steps:
      - name: Stop and remove containers, networks
        run: docker-compose down
      - name: Remove unused data
        run: docker system prune -a -f
  deploy:
    runs-on: self-hosted
    needs: prepare-environment
    steps:
      - name: checkout repo
        uses: actions/checkout@v3
      - name: docker-compose
        run: docker-compose up -d

Проверяйте, нажимайте, ждите, наблюдайте за результатом.

ЧИТАТЬ   Состояние активиста-инвестора Карла Айкана упало на 10 миллиардов долларов после того, как продавец коротких позиций обвинил его компанию в использовании схемы, похожей на пирамиду.
7b43c4289776da40c8bae7f120d26fb1

Все работает. Теперь мы можем создать значок и отправить его в README.md. Шаги показаны на картинке:

d7bf14baca62d10aac2b758859ccabc6

После этого появится окно с настройками значка.

913c78a02a2eda9801fca58e8678ca70

Я не менял настройки по умолчанию. Скопируйте сгенерированную ссылку, вставьте ее в README.md и получите следующее:

688bd105f50ee7f35041fe7f8ee66adb

Мобильные оповещения.

Хочется отметить функционал уведомлений о работе пайплайнов в мобильном приложении GitHub. Вы можете включить его в настройках. Это выглядит так:

fbc211307d1db5db6c0cf33893ac1e15

В случае с файлом можно даже посмотреть логи.

111909967580b3dce336f334b61e4d43

Заключение

В этой статье я описал процесс создания простого конвейера GitHub Actions для развертывания проекта Spring Boot с помощью Docker.

Единственное, что в этой статье сильно связано с программной реализацией — тестовая задача в созданном пайплайне. Все остальные аспекты создания и настройки CI/CD универсальны для всех проектов, использующих Docker.

Source

От admin