devops-configs/.github/workflows/deploy.yml
2025-12-26 17:46:00 +03:00

276 lines
No EOL
10 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Отслеживаемые действия
on:
push:
branches:
- develop
# - main
# Создадим глобальный .env
env:
REPO_NAME_WITH_OWNER: ${{ gitea.repository }}
BRANCH: ${{ github.ref_name }}
jobs:
info:
runs-on: docker
outputs:
REPO_NAME: ${{ steps.set-repo-name.outputs.REPO_NAME }}
steps:
- name: Job info
run: |
echo "Starting a pipeline triggered by a ${{ github.event_name }} event"
echo "This job is now running on a ${{ runner.os }} server hosted by Gitea!"
echo "The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
echo "${{ github.workflow }}"
- name: Get repository name
id: set-repo-name
run: |
# Записываем имя репозитория
echo "${{ gitea.repository }}" | cut -d "/" -f 2 > repo.txt
echo "REPO_NAME=$(cat repo.txt)" >> $GITHUB_OUTPUT
rm -rf repo.txt
ci:
needs: [info]
runs-on: docker
env:
REPO_NAME: ${{ needs.info.outputs.REPO_NAME }}
steps:
- name: Update project via SSH on remote server
uses: https://github.com/appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_DOMAIN }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.SERVER_PORT }}
script: |
# Переходим в директорию с проектами
mkdir -p ${{ secrets.PROJECT_PATH }}
cd ${{ secrets.PROJECT_PATH }}
# Создаем общую директорию для репозитория
mkdir -p ${{ env.REPO_NAME }}
cd ${{ env.REPO_NAME }}
# Создаем директорию для ветки
mkdir -p ${{ env.BRANCH }}
cd ${{ env.BRANCH }}
# Клонируем репозиторий, если необходимо, иначе добавляем последние изменения
if [ -z "$(ls -A)" ]; then
echo "Repository ${{ env.REPO_NAME }} not found. Cloning from GitHub..."
GIT_SSH_COMMAND="ssh -i ~/.ssh/deploy_key_rostelecom_back" git clone --branch ${{ env.BRANCH }} ssh://git@api.statanly.com:2222/${{ env.REPO_NAME_WITH_OWNER }}.git .
else
GIT_SSH_COMMAND="ssh -i ~/.ssh/deploy_key_rostelecom_back" git pull --ff-only
fi
# Добавим права доступа
chmod -R u+rwx ./logging_service
chmod u+rwx ./data/add_default_data.sh
autotests:
needs: [info, ci]
runs-on: docker
env:
REPO_NAME: ${{ needs.info.outputs.REPO_NAME }}
steps:
- name: Run autotests via SSH on remote server
uses: https://github.com/appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_DOMAIN }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.SERVER_PORT }}
command_timeout: 3h
script: |
# Переходим в директорию сервиса
cd ${{ secrets.PROJECT_PATH }}/${{ env.REPO_NAME }}/${{ env.BRANCH }}
# Запустим автотесты
#docker compose \
#--env-file ./src_backend/.env \
#--env-file ./src_backend/.env.test \
#-f docker-compose-test.yaml \
#up --build --abort-on-container-exit --exit-code-from api
sleep 1
delete_test_service:
needs: [info, autotests]
if: ${{needs.autotests.result == 'success' || failure() && needs.autotests.result == 'failure'}}
runs-on: docker
env:
REPO_NAME: ${{ needs.info.outputs.REPO_NAME }}
steps:
- name: Delete test service
uses: https://github.com/appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_DOMAIN }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.SERVER_PORT }}
script: |
# Переходим в директорию сервиса
cd ${{ secrets.PROJECT_PATH }}/${{ env.REPO_NAME }}/${{ env.BRANCH }}
# После проверок удалим тестовую версию сервиса
docker compose \
--env-file ./src_backend/.env \
--env-file ./src_backend/.env.test \
-f docker-compose-test.yaml \
down
undo-changes:
needs: [info, autotests]
if: ${{ failure() && needs.autotests.result == 'failure' }}
runs-on: docker
env:
REPO_NAME: ${{ needs.info.outputs.REPO_NAME }}
steps:
- name: Remove last commit
uses: https://github.com/appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_DOMAIN }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.SERVER_PORT }}
script: |
# Переходим в директорию сервиса
cd ${{ secrets.PROJECT_PATH }}/${{ env.REPO_NAME }}/${{ env.BRANCH }}
# Удаляем изменения последнего коммита
git reset --hard HEAD~1
cd:
needs: [info, autotests]
runs-on: docker
env:
REPO_NAME: ${{ needs.info.outputs.REPO_NAME }}
steps:
- name: Deploy verified code
uses: https://github.com/appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_DOMAIN }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.SERVER_PORT }}
command_timeout: 3h
script: |
# Переходим в директорию сервиса
cd ${{ secrets.PROJECT_PATH }}/${{ env.REPO_NAME }}/${{ env.BRANCH }}
# Поднимаем новый контейнер нужной версии
if [ ${{ env.BRANCH }} = "main" ]; then
docker compose \
--env-file ./src_backend/.env \
--env-file ./src_backend/.env.prod \
--env-file ./src_backend/.env.compose_vars \
down
docker compose \
--env-file ./src_backend/.env \
--env-file ./src_backend/.env.prod \
--env-file ./src_backend/.env.compose_vars \
up --build -d
sleep 15
# Добавляем базовые данные, если необходимо
data/add_default_data.sh \
--env_files src_backend/.env src_backend/.env.prod src_backend/.env.compose_vars \
--weights_archieve_name weights.tar.gz \
--default_data_dir ../default_data
else
docker compose \
--env-file ./src_backend/.env \
--env-file ./src_backend/.env.dev \
--env-file ./src_backend/.env.compose_vars \
down
docker compose \
--env-file ./src_backend/.env \
--env-file ./src_backend/.env.dev \
--env-file ./src_backend/.env.compose_vars \
up --build -d
sleep 15
# Добавляем базовые данные, если необходимо
data/add_default_data.sh \
--env_files src_backend/.env src_backend/.env.dev src_backend/.env.compose_vars \
--weights_archieve_name weights.tar.gz \
--default_data_dir ../default_data
fi
cd_astra:
needs: [info, cd]
if: github.ref_name == 'develop'
runs-on: docker
env:
REPO_NAME: ${{ needs.info.outputs.REPO_NAME }}
steps:
- name: Deploy verified code
uses: https://github.com/appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.SERVER_DOMAIN }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_ASTRA_PRIVATE_KEY }}
port: ${{ secrets.ASTRA_SERVER_PORT }}
command_timeout: 3h
script: |
# Переходим в директорию с проектами
mkdir -p ${{ secrets.ASTRA_PROJECT_PATH }}
cd ${{ secrets.ASTRA_PROJECT_PATH }}
# Создаем общую директорию для репозитория
mkdir -p ${{ env.REPO_NAME }}
cd ${{ env.REPO_NAME }}
# Создаем директорию для ветки
mkdir -p ${{ env.BRANCH }}
cd ${{ env.BRANCH }}
# Клонируем репозиторий, если необходимо, иначе добавляем последние изменения
if [ -z "$(ls -A)" ]; then
echo "Repository ${{ env.REPO_NAME }} not found. Cloning from GitHub..."
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa" git clone --branch ${{ env.BRANCH }} ssh://git@api.statanly.com:2222/${{ env.REPO_NAME_WITH_OWNER }}.git .
else
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa" git pull --ff-only
fi
# Поднимаем нужную dev версию сервиса
docker compose \
--env-file ./src_backend/.env \
--env-file ./src_backend/.env.astra \
--env-file ./src_backend/.env.compose_vars \
down
docker compose \
--env-file ./src_backend/.env \
--env-file ./src_backend/.env.astra \
--env-file ./src_backend/.env.compose_vars \
up --build -d
push-to-gitverse:
needs: [cd]
runs-on: docker
container:
image: node:20-bullseye
env:
GITVERSE_TOKEN: ${{ secrets.GITVERSE_TOKEN }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Print last 5 commits
run: git log -n 5 --oneline
- name: Push to Gitverse
run: |
git remote add gitverse https://${{ env.GITVERSE_TOKEN }}@gitverse.ru/${{ env.REPO_NAME_WITH_OWNER }}.git
git push gitverse ${{ env.BRANCH }}