No description
Find a file
2026-06-19 16:17:13 +03:00
docker_compose_build init7 2026-06-10 17:11:43 +03:00
docker_compose_up init7 2026-06-10 17:11:43 +03:00
hook_after_build init7 2026-06-10 17:11:43 +03:00
hook_after_deploy init7 2026-06-10 17:11:43 +03:00
hook_pre_build init7 2026-06-10 17:11:43 +03:00
init_repo fix 2026-06-19 16:17:13 +03:00
action.yml init3 2026-06-10 16:17:55 +03:00
README.md fix readme 2026-06-19 16:05:42 +03:00

shared-cicd

Репозиторй для хранения рабочего процесса CI/CD

Механика

при пуше в папку на сервере
~/services/cicd примонтирвоана как /cicd
клонинуется репозиторий если его нет в папку
НАЗВАНИЕ-РЕПОЗИТОРИЯ_ВЕТКА и ветка гит меняется на нужную
далее производится git pull на случай если папка уже была
после создается файлик .env в который попадают все секреты начинающиеся на ВЕТКА_
Cам префикс ветки убирается из имени секрета!
То есть например требуемая переменная TOKEN (они все должны быть заглавными)
тогда нужно зайти в настройки проекта→действия→секреты и добавить для каждой сетки свое значение. Например:
MASTER_TOKEN и TEST_TOKEN.
далее производится сборка
для докер команд используются файлы названые
compose-ВЕТКА.yaml
например
compose-test.yaml, compose-master.yaml
на следующем этапе пересоздание контейнера и запуск
Так же есть хуки в трех местах

  • pre-build перед сборкой
  • after-build после сборки и до запуска
  • after-deploy после запуска

для того чтобы ими воспользоватся нужно создать sh скрипты в папке scripts/ с префиксом
ИМЯ_ВЕТКИ-ИМЯ_HOOK.sh
например что бы запустить тесты на тестовой ветке после запуска нужен файл
scripts/test-after-deploy.sh
учтите что на поднятие сервиса самого внутри контейнера может уйти какоето время особенно если вы не сделали heath check
для этого надо добавить в свой образ curl и делать к себе запрос через соотвествующую секцию compose
или в тестовом скрипте учесть это

1 Добавляем секреты для каждой ветки с префиксом ВЕТКА_

Секреты могут добавлять только администраторы! Отправить список ключей значений администратору!

Заходим в проект -> Настрйоки -> Дейтсвия -> Секреты -> Добавить секрет

например
TEST_ARG1 "test arg 1"
MASTER_ARG1 "master arg 1"

Соответствующие переменные окружения БЕЗ префикса сами запишутся в .env на этапе init_repo

2 создаем файл для рабочего процесса

.forgejo/workflows/deploy.yml

name: Docker Deploy

on:
  push:
    branches:
      - 'master'
      - 'test'

jobs:
  update_cicd:
    runs-on: docker
    container:
      image: cicd_base:1
    steps:
      - name: init_repo
        uses: shared/cicd/init_repo@master
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          all_secrets_json: ${{ toJSON(secrets) }}

      - name: hook_pre_build
        uses: shared/cicd/hook_pre_build@master

      - name: docker_compose_build
        uses: shared/cicd/docker_compose_build@master

      - name: hook_after_build
        uses: shared/cicd/hook_after_build@master

      - name: docker_compose_up
        uses: shared/cicd/docker_compose_up@master

      - name: hook_after_deploy
        uses: shared/cicd/hook_after_deploy@master

3 Удостоверяемся что есть файлы сборки и запуска

Создаем под ветки test и master

compose-test.yaml
compose-master.yaml

Если монтируем volumes

Кроме того в .env запишется SERVER_FOLDER=,
где будет указан абсолютный правильный путь папки для монтирования volumes
например:

    volumes:
      - ${SERVER_FOLDER:-"."}/volumes/data:/app/data

4 Добавялем если нужно скрипты

Например, запустить тест после деплоя
создаем файл scripts/test-after-deploy.sh
пишем команду для теста в нём
обычно через docker compose exec
node или python в образе который выполняет команды нет,
но можно использовать docker run -rm что бы получить, что угодно

5 При пуше в master/test смотрим действия удачно ли они завершились

TODO

  • оповещения