- Le TP est réalisable entièrement dans Gitlab avec l'aide de l'éditeur de pipeline
- Vous allez vous placer sur votre projet personnel anf
- Vous allez créer une nouvelle branche tp5
- Vous allez vérifier dans les préférences générales du projet si la CI/CD est activée, activez la si nécessaire
- A partir de maintenant, vous allez simplement éditer et commiter le manifeste .gitlab-ci.yml
- Vous avez des liens pour vous aider sur chaque mot clé qui pointent sur la documentation Gitlab
----
### Etape 1 : Stages et Pipelines
- Créez un fichier .gitlab-ci.yml à la racine de votre projet ou utilisez le bouton "CI/CD configuration"
- Ajouter un seul <ahref="https://docs.gitlab.com/ee/ci/yaml/#stages">stage</a> test et le <ahref="https://docs.gitlab.com/ee/ci/yaml/#jobs">job </a> qui correspond
- Le script devra faire un "Hello world" et afficher la date courante
- Après le commit, visualisez le pipeline et l'execution du runner dans Gitlab
<details>
<summary>Solution</summary>
<pre><code>
stages :
- test
job_test :
stage: test
script :
- echo "Hello world"
- date
</code></pre>
</details>
----
- Les jobs sont exécutés dans des conteneurs Docker.
- Vous pouvez choisir le conteneur à utiliser avec le mot-clés image
- Pour l'execution précédente, l'image par défaut a été utilisée, recommencez en utilisant une image ubuntu
<details>
<summary>Solution</summary>
<pre><code>
image : ubuntu
stages :
- test
job_test :
stage: test
script :
- echo "Hello world"
- date
</code></pre>
</details>
----
- Un pipeline est défini à l'aide de plusieurs <ahref="https://docs.gitlab.com/ee/ci/yaml/#stages">stages</a>
- Plusieurs jobs de la même étape pourront être exécuté en même temps si les ressources le permettent.
- En revanche, l'exécution d'une étape dépend du bon déroulement de la précédente, à moins d'en autoriser explicitement l'échec avec <ahref="https://docs.gitlab.com/ee/ci/yaml/#allow_failure">allow_failure.</a>
- Vous allez créer un pipeline dans une image ubuntu avec 3 stages (Solution 1)
- le premier va executer une script pour donner la date
- le deuxième va executer une script pour donner le listing du répertoire courant "ls"
- le troisième va executer une script pour donner des informations système sur la machine "uname -r"
- Introduisez une erreur dans le script du stage 2 (appelez une commande non existante genre ms)
- Que se passe t'il pour le stage 3 ?
- Faites en sorte que le stage 3 soit executé malgré l'échec du stage 2 (Solution 2)
<details>
<summary>Solution 1 </summary>
<pre><code>
image : ubuntu
stages :
- test1
- test2
- test3
job_test1 :
stage: test1
script :
- date
job_test2 :
stage: test2
script :
- ls
job_test3 :
stage: test3
script :
- uname -r
</code></pre>
</details>
<details>
<summary>Solution 2 </summary>
<pre><code>
image : ubuntu
stages :
- test1
- test2
- test3
job_test1 :
stage: test1
script :
- date
job_test2 :
stage: test2
script :
- ms
allow_failure: true
job_test3 :
stage: test3
script :
- uname -r
</code></pre>
</details>
----
- Les mots clés <ahref="https://docs.gitlab.com/ee/ci/yaml/#only--except">only/except</a> permettent de définir des roles de déploiement
- Reprenez l'exemple avec 3 stages, et faites en sorte
- que le stage 1 soit toujours executé (pas de règles)
- que le stage 2 soit executé sur la branche tp5
- que le stage 3 soit executé sur une branche tp5_test que vous allez crée au préalable
- Vérifiez les exécutions sur les 2 branches
<details>
<summary>Solution </summary>
<pre><code>
image : ubuntu
stages :
- test1
- test2
- test3
job_test1 :
stage: test1
script :
- date
job_test2 :
stage: test2
script :
- ms
allow_failure: true
job_test3 :
stage: test3
script :
- uname -r
</code></pre>
</details>
### Etape 2 : Automatisation des tests avec Python
**Problème 1**
* Vous allez désormais utiliser une image python:3 pour exécuter le pipeline et il va falloir installer les modules qui vont bien !
* Vous devez avoir dans le répertoire TP5 un répertoire **src** avec le fichier [tri.py](src/tri.py) et son fichier de test [tri_test.py](src/tri_test.py)
* Vous allez écrire un stage de lecture qui execute pylint sur tri.py
* Vous allez écrire un stage de test qui exécute unittest
* Que se passe t'il avec le stage de lecture ? Peut être qu'il faut le considérer comme non bloquant !
* Vous allez maintenant ajouter un stage de build de la documentation
1. Vous devrez install sphinx et le theme rtd (sphinx-rtd-theme)
2. dans le répertoire documentation adaptez les fichiers à votre convenance : [conf.py](documentation/conf.py"conf for sphinx") et [index.rst](documentation/index.rst"index for sphinx")
3. Générer la documentation avec sphinx-build dans le répertoire public
4. Rajouter le path public dans [l'artifact](https://docs.gitlab.com/ee/ci/pipelines/job_artifacts.html"doc gitlab artifact")
5. Renommer votre job en "pages" et vérifiez après un déploiement réussi, l'accès à vos "pages" dans le menu **Settings > Pages**