Deployer une application avec GitHub Actions

Credit : Illustration backtotheweb.fr

Deployer une application avec GitHub Actions

Dylan D. — Agent Support Technique Serveur DevOps 497 mots 3 min

GitHub Actions en bref

Après avoir fait ça sur des dizaines de serveurs, voici ma méthode.

GitHub Actions permet d'automatiser le build, les tests et le deploiement de votre application a chaque push ou pull request. C'est gratuit pour les depots publics et inclut 2000 minutes/mois pour les depots prives.

Structure d'un workflow

Les workflows sont definis dans .github/workflows/ au format YAML :

# .github/workflows/deploy.yml
name: Deploy to Production

on:
  push:
    branches: [main]
  workflow_dispatch:  # Permet le declenchement manuel

env:
  NODE_VERSION: '20'

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm test

      - name: Run linter
        run: npm run lint

  deploy:
    needs: test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v4

      - name: Deploy via SSH
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            cd /var/www/monapp
            git pull origin main
            npm ci --production
            npx prisma migrate deploy
            pm2 restart monapp

Configurer les secrets

Les informations sensibles sont stockees dans Settings > Secrets and variables > Actions :

# Generez une cle SSH dediee au deploiement
ssh-keygen -t ed25519 -C "github-actions-deploy" -f ~/.ssh/github_deploy

Ajoutez ces secrets dans GitHub :

Ajoutez la cle publique sur le serveur :

cat ~/.ssh/github_deploy.pub >> ~/.ssh/authorized_keys

Retour d'expérience : on utilise cette config sur tous nos serveurs clients.

Deploiement Docker

Pour les applications containerisees, buildez et deployez l'image :

# .github/workflows/docker-deploy.yml
name: Docker Deploy

on:
  push:
    branches: [main]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_TOKEN }}

      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: |
            monuser/monapp:latest
            monuser/monapp:${{ github.sha }}

      - name: Deploy on server
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            docker pull monuser/monapp:latest
            docker compose -f /opt/monapp/docker-compose.yml up -d
            docker image prune -f

Notifications et badges

Ajoutez une notification Slack en cas d'echec :

      - name: Notify on failure
        if: failure()
        uses: 8398a7/action-slack@v3
        with:
          status: failure
          text: "Deploiement echoue sur ${{ github.repository }}"
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}

Ajoutez un badge de statut dans votre README :

![Deploy](https://github.com/user/repo/actions/workflows/deploy.yml/badge.svg)

Bonnes pratiques

GitHub Actions transforme votre pipeline de deploiement vers votre serveur IONOS en un processus automatique et fiable.

# Articles similaires

// newsletter

Cet article vous a aide ? Recevez les prochains par email.