diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 49233ae8bb7ed17ba01df514b5371cc3ab66c37d..05c4bf524d28c13eacc0632e18773071bc2b2361 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,11 +1,29 @@ -image: registry.gitlab.com/pages/hugo/hugo_extended:0.111.3 +image: registry.forgemia.inra.fr/agroclim/agrometinfo/docker-documentation -variables: - HUGO_ENV: ci +workflow: + rules: + # All commits on `main` can be published to pre-production using GitLab GUI (Build > Pipelines) + - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == "web" + variables: + HUGO_ENV: preproduction + SSH_PRIVATE_KEY: $PREPRODUCTION_SSH_PRIVATE_KEY + USER: $PREPRODUCTION_USER + SERVER: $PREPRODUCTION_SERVER + DESTDIR: $PREPRODUCTION_DESTDIR + # All tags are published to production, from `main` + - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH && $CI_COMMIT_TAG != null + variables: + HUGO_ENV: production + SSH_PRIVATE_KEY: $PRODUCTION_SSH_PRIVATE_KEY + USER: $PRODUCTION_USER + SERVER: $PRODUCTION_SERVER + DESTDIR: $PRODUCTION_DESTDIR + - when: always + variables: + HUGO_ENV: ci default: before_script: - - apk add --no-cache curl bash - bin/tool-dependencies.sh # Share caches across jobs in different branches # Cache modules in between jobs @@ -13,12 +31,20 @@ default: key: bin paths: - bin/lychee + tags: + - agroclim + test: script: + - echo $HUGO_ENV + - echo $CI_COMMIT_REF_NAME + - echo $CI_DEFAULT_BRANCH + - echo $CI_PIPELINE_SOURCE - hugo - bin/check.sh public/ pages: + needs: ["test"] script: - hugo artifacts: @@ -27,3 +53,17 @@ pages: rules: - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH +deploy: + needs: ["test"] + rules: + - if: $SSH_PRIVATE_KEY != null + before_script: + - eval $(ssh-agent -s) + - echo "$SSH_PRIVATE_KEY" | ssh-add - + - mkdir -p ~/.ssh + - touch ~/.ssh/known_hosts + - ssh-keygen -R $SERVER + - ssh-keyscan -H -t rsa $SERVER >> ~/.ssh/known_hosts + script: + - hugo + - rsync -rvz --delete --copy-links public/ $USER@$SERVER:$DESTDIR diff --git a/README.md b/README.md index e4d4103d354fc71f3e1ce1b821e679f6f93eddff..6f7f51dccb30259341de278d508c348658364de9 100644 --- a/README.md +++ b/README.md @@ -40,3 +40,40 @@ Pour modifier ou ajouter une page : - Vérifiez la bonne exécution de l'intégration sur la page <https://forgemia.inra.fr/agroclim/agrometinfo/documentation/-/pipelines>. - Faites une demande de fusion en choisissant « Écraser les commits lorsque la demande de fusion est acceptée. ». - Faites relire. + +## Déploiements + +Les pages sont publiées après construction et tests des liens grâce à l'intégration et au déploiement continus GitLab-CI. + +### Sur la production + +Un déploiement depuis la branche `main` sur le serveur de production s'exécute lors de l'[ajout d'une étiquette](https://forgemia.inra.fr/agroclim/agrometinfo/documentation/-/tags/new). + +Suivez le numéro de version de l'application pour nommer l'étiquette. +Si un déploiement intermédiaire doit être effectué, ajouter un numéro de sous version. +Exemple : si la version `v2.0.0` est en ligne et qu'une mise à jour de la documentation doit être publiée, nommez l'étiquette `v2.0.0.1`. Si une autre doit être publiée : `v2.0.0.2`. + +Un déploiement manuel est possible en utilisant le script `bin/deploy.sh`. + +### Sur la pré-production + +Un déploiement sur le serveur de pré-production s'exécute lors du [lancement manuel](https://forgemia.inra.fr/agroclim/agrometinfo/documentation/-/pipelines/new) du pipeline. + +Un déploiement manuel est possible en utilisant le script `bin/deploy.sh`. + +### Sur GitLab Pages + +Un déploiement sur GitLab Pages <https://agroclim.pages.mia.inra.fr/agrometinfo/documentation/> s'exécute à chaque validation sur la branche `main`. + +### Détails techniques + +L'image [Docker spécifique](https://forgemia.inra.fr/agroclim/agrometinfo/docker-documentation) a été préparée pour l'intégration et le déploiement continus. + +La configuration des intégration et déploiement continus a été faite dans : + +- `.gitlab-ci.yml` +- les [variables CI/CD](https://forgemia.inra.fr/agroclim/agrometinfo/documentation/-/settings/ci_cd) : + - création de clefs privées avec `ssh-keygen -t rsa` et `cat ~/.ssh/id_rsa` + - `PREPRODUCTION_DESTDIR`, `PREPRODUCTION_SERVER`, `PREPRODUCTION_USER` et `PREPRODUCTION_SSH_PRIVATE_KEY` +- les serveurs de production et pré-production : création d'un utilisateur, ajout de clef SSH + diff --git a/bin/check.sh b/bin/check.sh index 3d357594412fab1c5f6611639fb2042ee151979e..7bd3c34fc0fffee27323f4aa53dc8222804d1e0b 100755 --- a/bin/check.sh +++ b/bin/check.sh @@ -14,7 +14,12 @@ if [ "$INPUT_DIR" == "" ]; then exit 1; fi -if [ ! -f $BIN_DIR/lychee ]; then +LYCHEE=$(command -v lychee) +if [ ! -x "$LYCHEE" ]; then + LYCHEE=$BIN_DIR/lychee +fi + +if [ ! -f $LYCHEE ]; then echo_bold_red "- lychee is not installed. Install..." $BIN_DIR/tool-dependencies.sh fi @@ -25,7 +30,7 @@ if [ ! -d $INPUT_DIR ]; then fi echo_bold_green "- Checking links in $INPUT_DIR..." -$BIN_DIR/lychee --offline --exclude '.*/app$' $INPUT_DIR +$LYCHEE --offline --exclude '.*/app$' $INPUT_DIR if [ $? -ne 0 ]; then echo_bold_red "Errors were found" exit 1 diff --git a/bin/tool-dependencies.sh b/bin/tool-dependencies.sh index d4fb4ea400bf4189c148728e530cad7ac4ba5621..b4e8bddee368c4ccc3778271d55ba08c66527e2e 100755 --- a/bin/tool-dependencies.sh +++ b/bin/tool-dependencies.sh @@ -6,15 +6,23 @@ function echo_bold_red { echo -e "\033[31;1m"$1"\033[0m"; } +LYCHEE_VERSION="v0.13.0" +LYCHEE_TGZ="lychee-${LYCHEE_VERSION}-x86_64-unknown-linux-musl.tar.gz" +LYCHEE_URL="https://github.com/lycheeverse/lychee/releases/download/${LYCHEE_VERSION}/${LYCHEE_TGZ}" + +LYCHEE=$(command -v lychee) +if [ -x "$LYCHEE" ]; then + echo_bold_green "Lychee is installed" + exit +fi + BIN_DIR=$(dirname $0) if [ ! -f $BIN_DIR/lychee ]; then - VERSION=v0.13.0 - LYCHEETGZ=lychee-${VERSION}-x86_64-unknown-linux-musl.tar.gz echo_bold_green "Getting Lychee to check pages" mkdir -p $BIN_DIR if [ ! -f $BIN_DIR/$LYCHEETGZ ]; then - wget "https://github.com/lycheeverse/lychee/releases/download/${VERSION}/$LYCHEETGZ" -O $BIN_DIR/$LYCHEETGZ + curl --location $LYCHEE_URL -o $LYCHEE_TGZ fi - tar zxf $BIN_DIR/$LYCHEETGZ -C $BIN_DIR + tar zxf $LYCHEETGZ -C $BIN_DIR fi