4 min read

Compilation live avec gitlab ou github

Présentation de l’intégration continue (CI/CD) de sites web ou applications web dans gitlab ou github.

Gitlab et Github permettent de compiler dynamiquement et de déployer des sites webs, cela s’appelle le CI/CD. CI/CD veut dire Continuous Integration/Continuous deployment. Sur les 2 interfaces, vous pouvez visualiser le CI/CD en cliquant sur l’onglet portant ce nom.

Les 2 proposent une documentation détaillée:

Bon la doc est très vaste, je vais donc juste vous raconter mon expérience de déploiement de sites web statiques produits avec des packages R:

  • le présent blog avec blogdown
  • un site de documentation de package avec pkgdown
  • un livre avec bookdown

Les 3 cas partent de l’hypothèse que vous avez déposé les fichiers permettant de visualiser le site résultat dans un repository gitlab ou github.

Dans Gitlab

Dans un repository, vous avez sur la gauche tous les onglets de paramétrage du repository. On remarque l’onglet CI/CD où vous pourrez suivre les différentes compilations de votre site après avoir déposé les fichiers nécessaires.

Pour visualiser le site web, vous devez aller dans Settings -> Pages: Si la compilation est OK, vous y verrez l’url de votre site.

Attention pour que la compilation fonctionne avec gitlab, il faut impérativement qu’un répertoire /public existe. Donc, le créer pour le cas particulier de pkgdown et y transférer les fichiers créés localement dans /docs (n’oubliez pas de faire ce transfert à chaque nouvelle mise à jour de votre package).

Créez le fichier .gitlab-ci.yml qui configure la compilation du site (indispensable dans les 3 cas).

pkgdown

fichier .gitlab-ci.yml: on souhaite déployer ce site et visualiser les pages qui sont dans le ss-rep /public.

pages:
  stage: deploy
  script:
    - echo assuming pages are built in public
  artifacts:
    paths:
      - public
  only:
    - master

blogdown

fichier .gitlab-ci.yml:

image: debian:buster-slim

before_script:
  - apt-get update && apt-get -y install pandoc r-base
  - R -e "install.packages('blogdown',repos='http://cran.rstudio.com')"
  - R -e "install.packages('DiagrammeR',repos='http://cran.rstudio.com')"
  - R -e "install.packages('jsonlite',repos='http://cran.rstudio.com')"
  - R -e "install.packages('openssl',repos='http://cran.rstudio.com')"
  - R -e "install.packages('reticulate',repos='http://cran.rstudio.com')"
  - R -e "blogdown::install_hugo()"

pages:
  script:
    - R -e "blogdown::build_site()"
  artifacts:
    paths:
      - public
  only:
    - master

Vous voyez que ce fichier YAML est plus complet:

  1. création d’une image debian pour compiler le site web
  2. installation d’une version de R de base
  3. installation de packages R nécessaires pour l’utilisation de blogdown mais aussi pour les posts utilisant du code R spécifique
  4. la ligne de code créant le wite web : blogdown::build_site()

bookdown

fichier .gitlab-ci.yml:

image: rocker/verse:4.0.3

.bookdown:
  stage: deploy
  script:
    - Rscript -e "install.packages(c('gstat'), repos='https://cloud.r-project.org')"
    - Rscript -e "install.packages(c('sp'), repos='https://cloud.r-project.org')"
    - Rscript -e "install.packages(c('nlme'), repos='https://cloud.r-project.org')"
    - Rscript -e "install.packages(c('scales'), repos='https://cloud.r-project.org')"
    - Rscript -e "bookdown::render_book('index.Rmd', 'all', output_dir = 'public')"
  artifacts:
    paths:
      - public

pages:
  extends: .bookdown
  only:
    - master
  1. création d’une image docker avec une version de R récente
  2. installation de packages R nécessaires pour les chapitres du livre utilisant du code R spécifique
  3. la ligne de code créant le wite web : bookdown::render_book('index.Rmd', 'all', output_dir = 'public')

visualisation du site

Dans gitlab “classique”, si la compilation est OK, vous obtiendrez une url de ce type: https://MyID.gitlab.io/nomRepository

Dans le gitlab de la forgemia, ce sera plutôt : https://prenom.nom.pages.mia.inra.fr/nomRepo/

Vous pouvez demander à créer un nom de domaine plus adéquat en suivant la procédure:

  1. envoyez une demande de création de domaine à , en justifiant votre demande et en proposant le nom que vous souhaitez
  2. allez dans Settings -> Pages et cliquez sur le bouton New Domain et ajoutez l’url donnée par la forgemia.

Dans github

Il faut que vous soyez propriétaire du repository pour pouvoir initialiser la compilation du site web. Si c’est le cas, vous voyez en haut dans la barre des menus du repo, l’onglet settings. En cliquant dessus, vous voyez apparaitre dans la nouvelle fenêtre plusieurs onglets de paramétrage et là encore vous cliquez sur Pages.

Dans la section Sources de cette page, choisissez master branch dans la 1ere boite puis dans la 2e:

  • /docs pour pkgdown
  • /public pour blogdown et bookdown

Ceci indique à github d’afficher les fichiers web contenus dans le répertoire /docs ou /public (suivant la construction du package) de la branche master.

Déposez tous les fichiers permettant de produire le site web et la compilation se lancera.

Si la compilation est OK, vous verrez apparaitre une url pour votre site:

https://MyID.github.io/nomRepository