6  Configuration avancée

6.1 Modification des variables SK8 par défaut

Les variables par défaut présentées ci-dessous sont utilisées pour générer le Dockerfile. Elles peuvent être modifiées dans le fichier .gitlab-ci-sk8.yml.

  • MISE_A_JOUR_AUTOMATIQUE : “true” pour mettre à jour l’application automatiquement à chaque commit. Défaut “false
  • R_DOCKER_IMAGE_REPOSITORY : Image docker de base utilisée pour containeriser l’application. Défaut “r-base
  • R_DOCKER_IMAGE_TAG: “” : Permet d’utiliser un tag spécifique utilisé par défaut dans le dockerfile généré.
  • R_VERSION : Version de R utilisée par docker. Défaut la version stable actuelle
  • DOCKERFILE_NAME : Nom du fichier Dockerfile à utiliser, par défaut “Dockerfile”
  • SK8_DEBUG: “true” pour lancer les pipelines CI/CD en mode debug : les logs seront plus verbeux. Defaut : “false
  • DOCKER_FORCE_REGEN : “true” pour forçer la recréation de l’image de l’application sans utiliser les caches. Defaut : “false
  • DOCKERFILE_TYPE: “renv+rshiny”, spécifie le type de Dockerfile à utiliser (suite de tag possible: “renv” + “rshiny” + “bioc” + “shinyserver”)

Ci-dessous un exemple permettant de changer la version de R utilisée :

variables:
    R_VERSION: "4.1.3"

A noter que dans le cas où vous fournissez votre propre Dockerfile, seule la variable MISE_A_JOUR_AUTOMATIQUE sera prise en compte.

6.2 Ajouter des jobs au pipeline : modification du fichier .gitlab-ci.yml

Le fichier .gitlab-ci.yml permet de paramétrer le pipeline de votre projet. Par défaut il utilise des templates crées par SK8 qui ne peuvent être modifiés.

Vous pouvez ajouter vos propres tâches/jobs dans ce fichier en conservant bien ceux de SK8.

Les stages .pre et .post peuvent être utilisés pour ajouter respectivement avant ou après des jobs.

Le premier job du pipeline SK8 Configuration récupère ou génére des fichiers utilisés par les différents jobs suivants.
Vous pouvez télécharger ces fichiers en allant sur ce job et en cliquant sur la partie droite Job artifacts Download.

Actuellement le zip contient:

  • Le Dockerfile généré.
  • Le fichier renv.lock existant ou un equivalent généré.

6.3 Modifier le DockerFile du template

Par défaut, le Dockerfile nécessaire à la génération de l’image docker de votre application est créé à la volée par SK8 dans le job Configuration du pipeline, sauf si votre propre Dockerfile est déjà présent dans le repository (dans ce dernier cas le job Configuration n’est pas activé).

Il est possible de télécharger (via l’artifact du job Configuration) le Dockerfile généré par SK8 pour disposer d’une première base de Dockerfile, puis de le modifier et l’inclure dans le projet.

Pour le modifier, et intégrer votre propres commandes, il vous faudra à minima activer le package renv en local sur votre machine et commiter le fichier renv.lock généré.

6.4 Fournir son propre Dockerfile

Si vous fournissez votre propre Dockerfile vous devez à minima exposer l’application sur le port 3838, i.e. votre Dockerfile devrait contenir les lignes suivantes :

EXPOSE 3838
# Si l'application est installée dans /home/shiny/mon_projet
CMD ["sh", "-c", "Rscript -e \"shiny::runApp('/home/shiny/mon_projet', port = 3838, host = '0.0.0.0')\""]

6.5 Lancer localement l’image docker de mon application

Lors de l’action “push” un job “Construire-l-application” est déclenché. Ce dernier va créer une image docker de votre application, c’est-à-dire que le code de votre application et ses dépendances (autres packages R et librairies systèmes) vont être “empacté” dans un conteneur isolé (l’image docker).

Vous pouvez accéder à l’image Docker créée par le pipeline CI/CD soit par l’interface GitLab dans votre dépôt (consultation) soit en ligne de commande (utilisation).

Sur l’interface Gitlab :

  • L’accès à l’image se fait via le menu à gauche “Packages and Registries -> Container registry”.
  • Cliquer sur le lien de l’image la plus récente (suffixé latest) pour récupérer l’URL d’identification.

En ligne de commande :

Docker doit être installé sur votre poste

Pour accéder au dépôt des images docker de votre projet :

  • Si votre projet est public, il n’y a rien à faire pour le moment

  • Si votre projet est à accès restreint (interne ou privé), il vous faut :

    • Créer un token d’accès dans les settings de votre projet (settings -> Access Tokens -> Add new token)

    • Sélectionner le rôle Développeur à minima et le scope read_registry et créer le token (attention le token/clé généré est à conserver soigneusement car il ne sera plus disponible après)

    • Vous connecter au registry docker de la forgemia
      docker login -u <nom_du_token> -p <le_token_gitlab> registry.forgemia.inra.fr

Ensuite :

  • Instancier le container en local : docker run -it -p 3838:3838 registry.forgemia.inra.fr/<Chemin du projet>:latest
  • Accéder à l’application en local via votre navigateur web : http://localhost:3838