added CI/CD pipeline from backend
This commit is contained in:
parent
d4c622295c
commit
e40dea6b01
1 changed files with 276 additions and 0 deletions
276
.github/workflows/deploy.yml
vendored
Normal file
276
.github/workflows/deploy.yml
vendored
Normal file
|
|
@ -0,0 +1,276 @@
|
|||
# Отслеживаемые действия
|
||||
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 }}
|
||||
Loading…
Reference in a new issue