Skip to content

Fix CI/CD: deploy

Fix CI/CD: deploy #4

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
name: Build and Test
runs-on: ubuntu-latest
steps:
# Проверка репозитория
- name: Checkout code
uses: actions/checkout@v3
# Установка Go
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: 1.23 # Укажите нужную версию Go
# Установка зависимостей
- name: Install dependencies
run: go mod download
# Сборка приложения
- name: Build application
run: go build -ldflags='-s -w -extldflags "-static"' -o ./bot
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: bot
path: bot
# Запуск тестов
# - name: Run tests
# run: go test ./... -v
docker-build:
name: Build and Push Docker Image
runs-on: ubuntu-latest
needs: build
steps:
# Проверка репозитория
- name: Checkout code
uses: actions/checkout@v3
# Скачивание артифакта
- name: Download artifact
uses: actions/download-artifact@v3
with:
name: bot
# Логин в Docker Hub
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
# Сборка и пуш Docker-образа
- name: Build and Push Docker Image
run: |
docker build -t ${{ secrets.DOCKER_USERNAME }}/news-bot:latest .
docker push ${{ secrets.DOCKER_USERNAME }}/news-bot:latest
deploy:
name: Deploy to Server
runs-on: ubuntu-latest
needs: docker-build
steps:
# Логин на удаленный сервер
- name: Deploy to server
uses: appleboy/[email protected]
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
port: ${{ secrets.SERVER_PORT }}
script: |
docker pull ${{ secrets.DOCKER_USERNAME }}/news-bot:latest
docker stop news-bot || true
docker rm news-bot || true
docker run -d --name news-bot \
-e TELEGRAM_API_KEY=${{ secrets.TELEGRAM_API_KEY }} \
-e POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} \
-e POSTGRES_PORT=${{ secrets.POSTGRES_PORT }} \
-e POSTGRES_USER=${{ secrets.POSTGRES_USER }} \
-e POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} \
-e POSTGRES_DB=${{ secrets.POSTGRES_DB }} \
-p 8080:8080 ${{ secrets.DOCKER_USERNAME }}/news-bot:latest