From 50c04e3b476e2daf2da845771d067f756894bd0a Mon Sep 17 00:00:00 2001
From: Jean-Yves Gastaud <jygastaud@clever-age.com>
Date: Wed, 27 Nov 2019 15:28:49 +0100
Subject: [PATCH] Init project template

---
 .gitlab-ci.yml                           | 53 +++++++++++++++++++++
 .gitlab/issue_templates/Bug.md           | 44 +++++++++++++++++
 .gitlab/issue_templates/Story.md         | 18 +++++++
 .gitlab/merge_request_templates/Bug.md   | 13 +++++
 .gitlab/merge_request_templates/Story.md |  3 ++
 README.md                                | 60 +++++++++++++++++++++++-
 6 files changed, 190 insertions(+), 1 deletion(-)
 create mode 100644 .gitlab-ci.yml
 create mode 100644 .gitlab/issue_templates/Bug.md
 create mode 100644 .gitlab/issue_templates/Story.md
 create mode 100644 .gitlab/merge_request_templates/Bug.md
 create mode 100644 .gitlab/merge_request_templates/Story.md

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..1771cd7
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,53 @@
+#
+# Ce fichier doit être adapté en fonction du projet en renseignant les variables SONAR_PROJECT_KEY et SONAR_TOKEN dans la configuration graphique du projet (https://forge.grandlyon.com/<CHEMIN_DE_VOTRE_PROJET>/settings/ci_cd)
+# La variable SONAR_PROJET_KEY peut être trouvée sur https://sonarqube.forge.grandlyon.com/dashboard en ouvrant le projet et en copiant collant le champ en bas à droite (Project Key)
+#
+# La variable SONAR_TOKEN doit être générée par le responsable du projet depuis son interface sonar : https://sonarqube.forge.grandlyon.com/account/security/
+#
+
+image: docker:git
+
+services:
+  - docker:dind
+
+variables:
+  DOCKER_DRIVER: overlay2
+  DOCKER_TLS_CERTDIR: ""
+  SONAR_URL: https://sonarqube.forge.grandlyon.com
+
+stages:
+  - sonar-analysis
+  - build
+
+sonarqube:
+  stage: sonar-analysis
+  image: skilldlabs/sonar-scanner:3.4.0
+  script:
+    - >
+      sonar-scanner
+      -Dsonar.projectName=${CI_PROJECT_NAME}
+      -Dsonar.projectVersion=1.0
+      -Dsonar.sourceEncoding=UTF-8
+      -Dsonar.projectBaseDir=.
+      -Dsonar.host.url=${SONAR_URL}
+      -Dsonar.projectKey=${SONAR_PROJECT_KEY}
+      -Dsonar.login=${SONAR_TOKEN}
+
+build-master:
+  stage: build
+  script:
+    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+    - DOCKER_BUILDKIT=1 docker build --pull -t "$CI_REGISTRY_IMAGE" .
+    - docker push "$CI_REGISTRY_IMAGE"
+  only:
+    - master
+
+build:
+  stage: build
+  script:
+    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+    - DOCKER_BUILDKIT=1 docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .
+    - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
+  except:
+    - master
+
diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md
new file mode 100644
index 0000000..6b1310d
--- /dev/null
+++ b/.gitlab/issue_templates/Bug.md
@@ -0,0 +1,44 @@
+Titre:
+URL:
+Environnement:
+Description:
+
+# Bug issue template
+
+## Résumé
+
+(Résumé du bug rencontré en quelques mots)
+
+
+## Etapes pour reproduire
+
+(Comment peut-on reproduire le bug. Très important)
+
+## Environnement
+
+(L'environnement (prod, preprod, dev) où le bug est constaté)
+
+## URLs
+
+(La ou les URL(s) où le bug est rencontré)
+
+## Quel est le fonctionnement actuel ?
+
+(Que se passe-t-il ?)
+
+## Quel est le fonctionnement attendu ?
+
+(Que devrait-on voir ?)
+
+
+## Logs et/ou screenshots
+
+(Copier tous logs pertinents - en utilisant les code blocks (```) pour formater les sorties de console, logs, et code correctement afin d'en faciliter la lecture.)
+
+## Possible fixes
+
+(Si possible, lié la portion de code qui pourrait être responsable du problème.)
+
+/label ~bug ~reproduced ~needs-investigation
+/cc @jygastaud
+/assign @XXX
diff --git a/.gitlab/issue_templates/Story.md b/.gitlab/issue_templates/Story.md
new file mode 100644
index 0000000..0c5e9b1
--- /dev/null
+++ b/.gitlab/issue_templates/Story.md
@@ -0,0 +1,18 @@
+# Story template
+
+## Résumé
+
+En tant que
+Je veux que
+Afin de
+
+## Description
+
+(informations complémentaires)
+
+## ToDo
+
+* [ ] XXX
+* [ ] XXX
+* [ ] XXX
+ 
diff --git a/.gitlab/merge_request_templates/Bug.md b/.gitlab/merge_request_templates/Bug.md
new file mode 100644
index 0000000..7048e1b
--- /dev/null
+++ b/.gitlab/merge_request_templates/Bug.md
@@ -0,0 +1,13 @@
+## Que fait cette MR ?
+
+Résoud #XX
+
+## URL de test
+
+(https://makersboard.me, https://cdm.makersboard.me, https://cms.makersboard.me...)
+
+## Checklist
+
+* [ ] Bug résolu
+* [ ] Tests crées / mis à jour
+* [ ] Documentation créée / mise à jour
diff --git a/.gitlab/merge_request_templates/Story.md b/.gitlab/merge_request_templates/Story.md
new file mode 100644
index 0000000..2206f12
--- /dev/null
+++ b/.gitlab/merge_request_templates/Story.md
@@ -0,0 +1,3 @@
+## Que fait cette MR ?
+
+Résoud #XX
diff --git a/README.md b/README.md
index 04a44ca..c8c76a0 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,60 @@
-# gitlabci-docker
+# Template
 
+Ce dépôt à pour objectif de proposer des conseils et des templates pour démarrer facilement l'intgration continue sur un projet.
+
+## CI/CD
+
+Ce template utilise les fonctionnalités suivantes de la forge pour vous permettre de faire de l'Intégration Continue :
+
+* Gitlab CI
+* Docker
+
+Par défaut, votre projet bénéficie d'un **Runner Gitlab** actif et partagé par tous les projets.
+
+Ce runner est lancé via Docker et nécessite l'utilisation de Docker-in-Docker.
+Ce runner n'a que pour objectif de construire vos images.
+
+Si vous souhaitez effectuer des déploiements automatiques via Gitlab, il vous faudra intégrer votre propre runner.
+Vous retouverez les informations d'installation et de liaison d'un runner via le menu `Settings > CI / CD` puis déplier la zone `Runners` et suivre les instructions de la partie `Set up a specific Runner manually`.
+
+### Docker
+
+La configuration de Gitlab CI, sur la partie `build` assume que vous utilisez Docker et que votre fichier `Dockerfile` est à la racine du dépôt.
+
+Si ce n'est pas le cas, il vous faudra modifier les lignes contenant l'instruction `docker build`.
+
+Le template utilise également l'option `DOCKER_BUILDKIT=1` avant le build.
+Cette option, disponible à partir de Docker 18.09 permet notamment d'accélérer le build en mutualisant les couches si possibles.
+Cela est particulièrement utile dans le cas de l'utilisation de la fonctionnalité `multi-stage` de Docker.
+
+## SonarQube
+
+Aller sur [SonarQube](https://sonarqube.forge.grandlyon.com) puis créer un projet (de préférence utiliser le nom du dépot GitLab comme nom de projet sur SonarQube). 
+
+> IMPORTANT ! Bien conserver le token qui est généré à la création du projet, il est nécessaire pour la CI et n'est disponible qu'une seule fois !
+
+### Gitlab
+
+Dans le projet Gitlab aller dans Setting > CI / CD > Variables
+
+Puis ajouter les variables suivantes :
+- key = SONAR_PROJECT_KEY, value = [clé de projet ajouter dans SonarQube]
+- key = SONAR_TOKEN, value = le token généré à la création du projet dans Sonar.
+
+## Templates d'Issues et de Merge Request
+
+Dans le dossier `.gitlab`, vous retrouverez 2 exemples de templates.
+
+```
+.gitlab
+├── issue_templates
+│   ├── Bug.md
+│   └── Story.md
+└── merge_request_templates
+    ├── Bug.md
+    └── Story.md
+```
+
+Vous pouvez ajouter, modifier ou supprimer autant de templates que vous le souhaitez, tant que l'aborescence est respecté.
+
+Les templates sont à rédiger au format Markdown et doivent porter l'extension `.md`.
-- 
GitLab