<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CI-CD on AdRiLiNuX's web site</title><link>https://www.reslinger.net/categories/ci-cd/</link><description>Recent content in CI-CD on AdRiLiNuX's web site</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><lastBuildDate>Tue, 03 Sep 2019 08:51:19 +0200</lastBuildDate><atom:link href="https://www.reslinger.net/categories/ci-cd/index.xml" rel="self" type="application/rss+xml"/><item><title>Déploiement d'un site Hugo sur Gitlab et Github</title><link>https://www.reslinger.net/2019/09/d%C3%A9ploiement-dun-site-hugo-sur-gitlab-et-github/</link><pubDate>Tue, 03 Sep 2019 08:51:19 +0200</pubDate><guid>https://www.reslinger.net/2019/09/d%C3%A9ploiement-dun-site-hugo-sur-gitlab-et-github/</guid><description>&lt;p>On y pense pas toujours, mais le temps de maintenance d&amp;rsquo;un site peu vite prendre du temps. Bien qu&amp;rsquo;avec un Wordpress ça se fasse simplement, il faut toujours suivre son site. L&amp;rsquo;avantage des générateurs de site statiques est que la maintenance disparait. Alors comme beaucoup aujourd&amp;rsquo;hui, &lt;a href="https://www.reslinger.net/2017/10/hello-website-powered-by-lektor/">j&amp;rsquo;en ai adopté un il y a 2 ans&lt;/a> environ. Tout fonctionneait parfaitement même si le thème par défaut que je n&amp;rsquo;avais pas modifier ne me plaisais pas trop.&lt;/p>
&lt;p>Aujourd&amp;rsquo;hui, je vais vous parler de &lt;a href="https://gohugo.io/">Hugo&lt;/a>. Ce générateur de site static est à la mode mais ce n&amp;rsquo;est pas la seule raison de mon changement. Je suis un peu alergique au modification d&amp;rsquo;un système d&amp;rsquo;exploitation autrement que par son gestionnaire de paquet (à la rigueur j&amp;rsquo;accepte la compilation de source installé dans /usr/local/). J&amp;rsquo;ai donc exclu lektor à cause de pip.&lt;/p>
&lt;p>Je passerai volontairement sur &lt;a href="https://gohugo.io/getting-started/installing">l&amp;rsquo;installation&lt;/a> et la &lt;a href="https://gohugo.io/getting-started/quick-start/">création d&amp;rsquo;un premier site&lt;/a> qui sont bien documentés.&lt;/p>
&lt;p>L&amp;rsquo;article du jour concerne le déploiement continu (alias CD) du site sur &lt;a href="https://about.gitlab.com/product/pages/">Gitlab Pages&lt;/a> et &lt;a href="https://pages.github.com/">Github Page&lt;/a> depuis Gitlab CI.&lt;/p>
&lt;p>Pour un déploiement simple sur Gitlab, il n&amp;rsquo;y a pas grand chose à faire pour que ça fonctionne. L&amp;rsquo;exemple de .gitlab-ci.yml proposé sur le &lt;a href="https://gohugo.io/hosting-and-deployment/hosting-on-gitlab/">site de hugo&lt;/a> fonctionne parfaitement.&lt;/p>
&lt;p>Pour un déploiement en simultané sur Github, il va nous faloir générer une pair de clé ssh dédiée pour l&amp;rsquo;opération. La commande suivante devrait nous permettre d&amp;rsquo;y parvenir :&lt;/p>
&lt;pre>&lt;code>ssh-keygen -t ed25519 -b 256 -f github
&lt;/code>&lt;/pre>
&lt;p>Le contenu de la clé publique sera utiliser pour créer une nouvelle clé de déploiement dans les préférences du projet Github :&lt;/p>
&lt;p>&lt;img src="Github-ssh.png" alt="Ajout d&amp;rsquo;une clé dans un projet Github">&lt;/p>
&lt;p>Le contenu de la clé privée sera, lui, utilisé comme variable dans l&amp;rsquo;intégration et livraison continue du projet Gitlab au coté de l&amp;rsquo;email et du login :&lt;/p>
&lt;p>&lt;img src="Gitlab-CI-Variable.png" alt="Ajout de la clé privée dans un projet Gitlab">&lt;/p>
&lt;p>Maintenant il ne reste plus qu&amp;rsquo;à rajouter quelques lignes dans la section script du fichier .gitlab-ci.yml pour récupérer le dépôt depuis Github, nétoyer le répertoire et pushé le tout un fois le build fait.
Cela nous donne quelque chose comme ceci:&lt;/p>
&lt;pre>&lt;code>pages:
script:
- mkdir -m 700 ~/.ssh; echo &amp;quot;$GITHUB_KEY&amp;quot; &amp;gt; ~/.ssh/id_ed25519; chmod 600 ~/.ssh/id_ed25519; ssh-keyscan -t rsa github.com &amp;gt;&amp;gt; ~/.ssh/known_hosts
- git clone git@github.com:${MY_NAME}/project_name.github.io.git public
- rm -fr public/*
- hugo
- git config --global user.email &amp;quot;$MY_EMAIL&amp;quot;; git config --global user.name &amp;quot;$MY_NAME&amp;quot;
- cd public; git add -A; git commit -m &amp;quot;Auto update&amp;quot;; git push --force
artifacts:
paths:
- public
only:
- master
&lt;/code>&lt;/pre>
&lt;p>Edit: La synchronisation fonctionne bien et restera en l&amp;rsquo;état pour le moment, github gère son certificat let&amp;rsquo;s encrypt lui même, ce qui ne permet pas de faire du loadbalancing pour le moment.&lt;/p></description></item></channel></rss>