From 29d66974cb7297df33c77deb686af02e53f45626 Mon Sep 17 00:00:00 2001 From: vbevdev Date: Sat, 4 Jul 2026 01:01:53 +0300 Subject: [PATCH] deploy-workflow: create docker compose file --- .gitea/workflows/deploy.yaml | 71 ++++++++++--------- .../workflows/test_telegram_deploy_bot.yaml | 8 +-- 2 files changed, 43 insertions(+), 36 deletions(-) diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml index 7af81d5..1424879 100644 --- a/.gitea/workflows/deploy.yaml +++ b/.gitea/workflows/deploy.yaml @@ -1,5 +1,5 @@ -name: Deploy -run-name: Deploy +name: 🚀 Deploy +run-name: '🚀 Deploy: ${{ gitea.ref_name }} by @${{ gitea.actor }}' on: workflow_dispatch: @@ -17,11 +17,10 @@ jobs: echo "Clean ref name: $CLEAN_REF_NAME" echo "CLEAN_REF_NAME=$CLEAN_REF_NAME" >> $GITEA_ENV - - name: ⚙️ Configure SSH Client - run: | - sudo apt-get update && sudo apt-get install -y sshpass - mkdir -p ~/.ssh - ssh-keyscan -p 22 "${{ secrets.SSH_HOST }}" >> ~/.ssh/known_hosts + - name: ⚙️ Configure ssh client + uses: ./.gitea/actions/configure-ssh-client + with: + ssh_host: ${{ secrets.SSH_HOST }} - name: 🏗️ Create docker-compose file env: @@ -46,7 +45,7 @@ jobs: DEPLOY_DIRECTORY: ${{ secrets.DEPLOY_DIRECTORY }} BESZEL_AGENT_KEY: ${{ secrets.BESZEL_AGENT_KEY }} BESZEL_AGENT_TOKEN: ${{ secrets.BESZEL_AGENT_TOKEN }} - GITEA_RUNNER_REGISTRATION_TOKEN: ${{ secrets._GITEA_RUNNER_REGISTRATION_TOKEN }} + GITEA_RUNNER_REGISTRATION_TOKEN: ${{ secrets.RUNNER_REGISTRATION_TOKEN }} VAULTWARDEN_ADMIN_TOKEN: ${{ secrets.VAULTWARDEN_ADMIN_TOKEN }} run: | sshpass -e ssh -p 22 "$SSH_USERNAME@$SSH_HOST" bash -s << EOT @@ -74,6 +73,18 @@ jobs: chmod 600 secrets/*.txt EOT + - name: ✍️ Prepare success deploy message + id: prepare_success_deploy_message + uses: ./.gitea/actions/telegram-message-escape + with: + message: '✅ *Деплой успешен!* %0AСервер применил релиз: `${{ gitea.ref_name }}`' + + - name: ✍️ Prepare failure deploy message + id: prepare_failure_deploy_message + uses: ./.gitea/actions/telegram-message-escape + with: + message: '❌ *Ошибка деплоя!* %0AСервер *не* применил релиз: `${{ gitea.ref_name }}`' + - name: 🚀 Run new containers env: SSHPASS: ${{ secrets.SSH_PASSWORD }} @@ -81,45 +92,41 @@ jobs: SSH_HOST: ${{ secrets.SSH_HOST }} DEPLOY_DIRECTORY: ${{ secrets.DEPLOY_DIRECTORY }} REF_NAME: ${{ env.CLEAN_REF_NAME }} - TELEGRAM_TOKEN: ${{ secrets.DEPLOY_TELEGRAM_BOT_TOKEN }} - TELEGRAM_CHAT: ${{ secrets.DEPLOY_TELEGRAM_CHAT_ID }} - PROXY_HOST: ${{ secrets.PROXY_HOST }} - PROXY_PORT: ${{ secrets.PROXY_PORT }} - PROXY_USER: ${{ secrets.PROXY_USER }} - PROXY_PASSWORD: ${{ secrets.PROXY_PASSWORD }} + TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_DEPLOY_BOT_TOKEN }} + TELEGRAM_CHAT: ${{ secrets.TELEGRAM_DEPLOY_CHAT_ID }} + PROXY_URL: ${{ secrets.PROXY_URL }} + SUCCESS_DEPLOY_MESSAGE: ${{ steps.prepare_success_deploy_message.outputs.escaped_message }} + FAILURE_DEPLOY_MESSAGE: ${{ steps.prepare_failure_deploy_message.outputs.escaped_message }} run: | sshpass -e ssh -p 22 "$SSH_USERNAME@$SSH_HOST" bash -s << EOT set -e cd "$DEPLOY_DIRECTORY" nohup bash -c ' - sleep 5 + sleep 10 - if docker compose -f "docker-compose-${REF_NAME}.yml" up -d --remove-orphans > /tmp/docker_deploy.log 2>&1; then - ESCAPED_REF=\$(echo "${REF_NAME}" | sed "s/-/\\\\-/g" | sed "s/\./\\\\./g") - TEXT="🚀 *Деплой успешен\!* %0AСервер применил релиз: \`\$ESCAPED_REF\`" - - # ИСПРАВЛЕНО: Восстановлен верный URL api.telegram.org/bot\$TELEGRAM_TOKEN/ - curl -s -X POST "https://telegram.org\${TELEGRAM_TOKEN}/sendMessage" \ - --proxy "http://${PROXY_USER}:${PROXY_PASSWORD}@${PROXY_HOST}:${PROXY_PORT}" \ + if docker compose --dry-run -f "docker-compose-${REF_NAME}.yml" up -d --remove-orphans > /tmp/docker_deploy.log 2>&1; then + curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \ + --proxy "${PROXY_URL}" \ -d "chat_id=${TELEGRAM_CHAT}" \ -d "parse_mode=MarkdownV2" \ - -d "text=\$TEXT" > /dev/null + -d "text=$SUCCESS_DEPLOY_MESSAGE" > /dev/null else - ERROR_LOG=\$(tail -n 10 /tmp/docker_deploy.log) - ESCAPED_LOG=\$(echo "\$ERROR_LOG" | sed "s/-/\\\\-/g" | sed "s/\./\\\\./g" | sed "s/!/\\\\!/g") - TEXT="❌ *Ошибка деплоя релиза ${REF_NAME}\!* %0A%0A\`\`\`%0A\$ESCAPED_LOG%0A\`\`\`" - - # ИСПРАВЛЕНО: Здесь URL тоже приведен к стандарту Telegram API - curl -s -X POST "https://telegram.org\${TELEGRAM_TOKEN}/sendMessage" \ - --proxy "http://${PROXY_USER}:${PROXY_PASSWORD}@${PROXY_HOST}:${PROXY_PORT}" \ + curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage" \ + --proxy "${PROXY_URL}" \ -d "chat_id=${TELEGRAM_CHAT}" \ -d "parse_mode=MarkdownV2" \ - -d "text=\$TEXT" > /dev/null + -d "text=$FAILURE_DEPLOY_MESSAGE" > /dev/null + + curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendDocument" \ + --proxy "${PROXY_URL}" \ + -F "chat_id=${TELEGRAM_CHAT}" \ + -F "document=@/tmp/docker_deploy.log" \ + -F "caption=logs" > /dev/null fi rm -f /tmp/docker_deploy.log ' > /dev/null 2>&1 & EOT - echo "New containers will be started after 5 seconds" \ No newline at end of file + echo "New containers will be started after 10 seconds" \ No newline at end of file diff --git a/.gitea/workflows/test_telegram_deploy_bot.yaml b/.gitea/workflows/test_telegram_deploy_bot.yaml index bb4bfb3..e1fea00 100644 --- a/.gitea/workflows/test_telegram_deploy_bot.yaml +++ b/.gitea/workflows/test_telegram_deploy_bot.yaml @@ -7,21 +7,21 @@ jobs: send_test_message: runs-on: ubuntu-latest steps: - - name: Checout repository + - name: 📂 Checkout repository uses: actions/checkout@v4 - - name: Configure ssh client + - name: ⚙️ Configure ssh client uses: ./.gitea/actions/configure-ssh-client with: ssh_host: ${{ secrets.SSH_HOST }} - - name: Prepare message + - name: ✍️ Prepare message id: prepare_message uses: ./.gitea/actions/telegram-message-escape with: message: 💬 Test message - - name: Send message + - name: 💬 Send message env: SSHPASS: ${{ secrets.SSH_PASSWORD }} SSH_USERNAME: ${{ secrets.SSH_USERNAME }}