Skip to content

Commit

Permalink
feat(infra): refactor structure playbooks (#15)
Browse files Browse the repository at this point in the history
* feat: add monitoring agents

* chore: add ga publish

* refactor(infra): simplify structure

* chore: quick pass down test
  • Loading branch information
antoinebigard authored Mar 30, 2023
1 parent dc85173 commit 6c84875
Show file tree
Hide file tree
Showing 100 changed files with 872 additions and 743 deletions.
86 changes: 86 additions & 0 deletions .github/workflows/_deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: Deployment
on:
workflow_dispatch:
inputs:
environment:
description: The environment to deploy to
type: string
required: true
server_ip:
description: The targeted server
type: string
required: true
user:
description: The server user to connect
type: string
required: true
secrets:
SSH_PRIVATE_KEY:
description: SSH private key
required: true
SSH_KNOWN_HOSTS:
description: SSH known hosts list
required: true
SLACK_WEBHOOK_URL:
description: Slack webhook URL
required: true
outputs:
status:
description: Whether deployment succeeded or not
value: ${{ jobs.deploy.outputs.status }}
jobs:
deploy:
name: Deploy on ${{ inputs.environment }}
runs-on: ubuntu-latest
steps:
- name: Notify new deployment on Slack
uses: ravsamhq/notify-slack-action@v2
if: always()
with:
status: ${{ job.status }}
notification_title: "Déploiement en ${{ inputs.environment }} initié..."
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

- name: Checkout project
uses: actions/checkout@v3
with:
fetch-depth: 0
persist-credentials: false

- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
name: github_actions
key: ${{ secrets.SSH_PRIVATE_KEY }}
known_hosts: ${{ secrets.SSH_KNOWN_HOSTS }}
config: |
Host ${{inputs.server_ip}}
HostName ${{inputs.server_ip}}
User ${{inputs.user}}
IdentityFile ~/.ssh/github_actions
- name: Run playbook
run: |
bash .infra/scripts/deploy-app.sh ${{ inputs.environment }}
- name: Notify failure on Slack
uses: ravsamhq/notify-slack-action@v2
if: always()
with:
status: ${{ job.status }}
notification_title: "Le déploiement en ${{ inputs.environment }} a échoué"
notify_when: "failure"
mention_groups: "!channel"
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

- name: Notify success on Slack
uses: ravsamhq/notify-slack-action@v2
if: always()
with:
status: ${{ job.status }}
notification_title: "Déploiement en ${{ inputs.environment }} terminé avec succès"
notify_when: "success"
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
9 changes: 5 additions & 4 deletions .github/workflows/yarn-ci.yml → .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
name: Yarn CI
name: CI
on: [pull_request]
jobs:
ciserver:
runs-on: ubuntu-latest
steps:
- name: Checkout project
uses: actions/checkout@v2
uses: actions/checkout@v3

- uses: actions/setup-node@v1
- uses: actions/setup-node@v3
with:
node-version: 18
- uses: actions/cache@v2

- uses: actions/cache@v3
with:
path: "**/node_modules"
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
Expand Down
46 changes: 46 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Publish
on:
push:
branches: [xxxx]

jobs:
publish-ghcr:
name: Publish
runs-on: ubuntu-latest
steps:
- name: Checkout project
uses: actions/checkout@v2
with:
fetch-depth: 0
persist-credentials: false

- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GH_FG_TOKEN }}

- name: Build the reverse-proxy Docker image
run: |
docker build ./reverse_proxy --tag ghcr.io/mission-apprentissage/mna_bal_reverse_proxy:1.3.0 \
--label "org.opencontainers.image.source=https://github.com/mission-apprentissage/bal" \
--label "org.opencontainers.image.description=Reverse proxy bal" \
--label "org.opencontainers.image.licenses=MIT"
docker push ghcr.io/mission-apprentissage/mna_bal_reverse_proxy:1.3.0
- name: Build the ui Docker image
run: |
docker build . -f "ui/Dockerfile" --tag ghcr.io/mission-apprentissage/mna_bal_ui:1.3.0 \
--label "org.opencontainers.image.source=https://github.com/mission-apprentissage/bal" \
--label "org.opencontainers.image.description=Ui bal" \
--label "org.opencontainers.image.licenses=MIT"
docker push ghcr.io/mission-apprentissage/mna_bal_ui:1.3.0
- name: Build the server Docker image
run: |
docker build . -f "server/Dockerfile" --tag ghcr.io/mission-apprentissage/mna_bal_server:1.3.0 \
--label "org.opencontainers.image.source=https://github.com/mission-apprentissage/bal" \
--label "org.opencontainers.image.description=Server bal" \
--label "org.opencontainers.image.licenses=MIT"
docker push ghcr.io/mission-apprentissage/mna_bal_server:1.3.0
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Release version production
name: Release version
on:
push:
branches: [main]
Expand All @@ -9,15 +9,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout project
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
fetch-depth: 0
persist-credentials: false

- uses: actions/setup-node@v1
- uses: actions/setup-node@v3
with:
node-version: 16.6.0
- uses: actions/cache@v2
node-version: 18

- uses: actions/cache@v3
with:
path: "**/node_modules"
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
Expand Down
20 changes: 10 additions & 10 deletions .infra/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,20 +81,20 @@ nécessaire.
## Vault

Il est vivement recommander de stocker toutes les variables d'environnement sensibles (ex: token) dans un vault Ansible.
Le fichier `ansible/roles/setup/vars/main/vault.yaml` contient déjà les données jugées sensibles.
Le fichier `vault/vault.yaml` contient déjà les données jugées sensibles.

### Création du vault

Dans un premier temps, vous devez générer le mot de passe du vault. Ce mot de passe sera chiffré via GPG et pourra
uniquement être obtenu par les personnes listées dans le fichier `ansible/roles/setup/vars/main/habilitations.yml`
uniquement être obtenu par les personnes listées dans le fichier `vault/habilitations.yml`

Pour se faire, lancez la commande suivante :

```bash
bash scripts/vault/generate-vault-password.sh
```

Cette commande va créer le fichier `ansible/.vault-password.gpg`, vous devez le commiter.
Cette commande va créer le fichier `vault/.vault-password.gpg`, vous devez le commiter.

Le mot de passe contenu dans ce fichier va permettre de chiffrer le ficihier `vault.yml`. Pour se
faire, il faut lancer la commande suivante :
Expand All @@ -104,7 +104,7 @@ faire, il faut lancer la commande suivante :
```

Le script va utiliser votre clé GPG et probablement vous demander votre passphrase. Il va ensuite chiffrer le
fichier `ansible/roles/setup/vars/main/vault.yml`.
fichier `vault/vault.yml`.

```yaml
$ANSIBLE_VAULT;1.2;AES256;mnaprojectname_ansible_secret
Expand All @@ -130,9 +130,9 @@ Quand vous allez ouvrir le fichier, un mot de passe vous sera demandé. Pour l'o
Vous pouvez également éditer directement le fichier en ligne de commande sans afficher en clair le mot de passe :

```bash
EDITOR=vim bash scripts/vault/edit-vault.sh ansible/roles/setup/vars/main/vault.yml
EDITOR=vim bash scripts/vault/edit-vault.sh vault/vault.yml
ou
EDITOR="code -w" bash scripts/vault/edit-vault.sh ansible/roles/setup/vars/main/vault.yml
EDITOR="code -w" bash scripts/vault/edit-vault.sh vault/vault.yml
```

### Variables du vault
Expand Down Expand Up @@ -167,7 +167,7 @@ l'environnement cible.
### Ajout d'un utilisateur

Il est possible d'ajouter ou de supprimer des habilitations en éditant le
fichier `ansible/roles/setup/vars/main/habilitations.yml`. Tous les utilistateurs présents dans ce fichier pourront se
fichier `vault/habilitations.yml`. Tous les utilistateurs présents dans ce fichier pourront se
connecter aux environnements via leurs clés SSH. Ils pourront également accéder au vault et déchiffrer les backups des
environnements si une clé GPG est fournie.

Expand All @@ -192,7 +192,7 @@ l'environnement.

Pour supprimer une personne des habilitations, il faut :

- enlever les informations renseignées à son sujet dans le fichier `ansible/roles/setup/vars/main/habilitations.yml`
- enlever les informations renseignées à son sujet dans le fichier `vault/habilitations.yml`
- ajouter le username de la personne dans le fichier `ansible/roles/clean/tasks/main.yml`

Une fois ces fichiers mis à jour, vous devez renouveler le vault et lancer la commande de nettoyage :
Expand Down Expand Up @@ -221,7 +221,7 @@ Quand le script est terminé, vous pouvez aller sur l'interface
OVH [https://www.ovh.com/manager/dedicated/#/nasha/zpool-128310/partitions](https://www.ovh.com/manager/dedicated/#/nasha/zpool-128310/partitions)
afin de vérifier que la partition est bien créée.

- Dans le fichier `ansible/env.ini`, vous devez ensuite ajouter la nom de la partition pour l'environnement :
- Dans le fichier `/env.ini`, vous devez ensuite ajouter la nom de la partition pour l'environnement :

```
backup_partition_name=<nom de la partition>
Expand Down Expand Up @@ -278,7 +278,7 @@ afin de vérifier que le firewall a été activé pour l'ip du VPS.

### Déclaration de l'environnement

Le fichier `ansible/env.ini` définit les environnements de l'application. Il faut donc ajouter le nouvel environnement
Le fichier `/env.ini` définit les environnements de l'application. Il faut donc ajouter le nouvel environnement
dans ce fichier en renseignant les informations suivantes :

```
Expand Down
5 changes: 0 additions & 5 deletions .infra/ansible/clean.yml

This file was deleted.

5 changes: 0 additions & 5 deletions .infra/ansible/deploy.yml

This file was deleted.

7 changes: 0 additions & 7 deletions .infra/ansible/roles/clean/tasks/main.yml

This file was deleted.

6 changes: 0 additions & 6 deletions .infra/ansible/roles/deploy/tasks/main.yml

This file was deleted.

This file was deleted.

This file was deleted.

Loading

0 comments on commit 6c84875

Please sign in to comment.