TLDR;) Lisez le titre et vous avez l'info.

 

Jeudi dernier nous organisions chez YounitedCredit un meetup DevTalks.NET pour faire un retour sur la conférence dotnetconf.

Nous avons ainsi passé en revue les dernières annonces et fait quelques démos liés à la dernière version de .NET Core.

Pour ma part j'ai fait une session de live-coding pour présenter Github Actions 2.0 et son utilisation pour créer un pipeline de CI/CD (Continuous Integration et Continuous Deployment) d'une application .NET Core 3.0 sur Azure, tout ça depuis Github.

Tout fier de moi, je finis ma démo par un "ça y est on a déployé notre app et.... ça ne fonctionne pas ! :)". On m'a bien sûr fait la remarque que le self-contained deployment était une solution mais je trouve que ce n'est pas idéal car trop lourd à déployer et que les équipes  .NET et Azure auraient pu anticiper et le rendre disponible le jour de l'annonce.

...J'aurais dû me douter que je provoquais le karma...

En effet, depuis le 25 septembre, le dernier runtime .NET Core disponible pour les web appp sur Azure était la version 2.2. Notre app ciblant .NET Core 3.0 ne pouvait donc pas fonctionner.

Annotation 2019-10-05 102957.png

Bien mal m'en a pris car le karma m'attendait au tournant. C'est dès le lendemain, après mon écriture d'un blog post sur le sujet et juste avant sa publication, que Microsoft a annoncé la disponibilité de la dernière version du runtime pour les App Service, m'obligeant par la même occasion à annuler mon blogpost et le remplacer par ce mea-culpa, bien trop long pour une news si simple ;)

Annotation 2019-10-05 102931.png

 

Conclusion: Soyez patients, ne provoquez pas le karma et amusez-vous avec .NET Core 3.0 sur Azure !

 

PS: Pour ceux qui verraient que ce n'est pas encore disponible pour Linux, sachez que ça arrive très bientôt (on ne m'y reprendra pas).

Cet article est le second d'une série sur Github Actions et la mise en place d'une chaîne CI/CD.

Aujourd'hui, nous verrons comment créer un pipeline de déploiement d'applications sur Azure PaaS.

Vous pourrez même afficher un petit badge ;)

Préparation

Tout d'abord, il faut avoir Github Actions activé. Oui, je l'ai déjà dit lorsque l'on a mis en place l'intégration continue mais bon... Encore une fois, allez faire votre demande d'accès rapidement ou attendez le 13 novembre pour la disponibilité générale.

Il vous faudra également avoir packagé votre application et créé un artifact. Pour cela je vous invite à revenir à mon article précédent, et notamment la section Package & Artifacts.

Vous devriez voir votre artifact dans la partie en haut à droite de vos logs de workflow :

 

Azure Web App

Pour déployer notre application dans une Web App Azure, il nous faut ... ? Allez je vous laisse encore quelques sencondes... une Web App?! Ouiiii! Bravo !

 

Provisionnement

Je ne vous montrerai pas ici comment provisionner une Web App mais je peux vous fournir un lien vers la documentation App Service.

Pour les allergiques du clic ou afficionados de l'automatisation poussée, je vous renvoie vers le blog post de mon collègue Wilfried qui a déjà expliqué comment déployer une infra via ARM depuis Github Actions.

Bref, dans tous les cas, on partira ici du principe que votre Web App est provisionnée, et que votre artifact s'appelle webapp.

 

Publishing Profile

Pour déployer votre Web App, vous aurez besoin du profil de déploiement. Comme son nom l'indique, il contient les informations nécessaires pour le déploiement, telles que l'url, les identifiants de connexion, etc.

Ouvrez le portail Azure et naviguez jusqu'à votre Web App.

Dans la barre de commandes en haut, cliquez sur "Get publish profile".

Get publish profile

Une fois le fichier téléchargé, ouvrez-le avec un éditeur de texte et copiez le contenu du fichier XML :

<publishData><publishProfile profileName="actionsSampleApp - Web Deploy" publishMethod="MSDeploy" ...

 

Retournons maintenant dans notre repository Github.

Ouvrez le menu Settings, puis dans le menu de gauche, ouvrez le panneau Secrets.

github-secrets.png

Cliquez ensuite sur Add a new secret et collez le contenu de votre publish profile.

Vous devriez donc avoir un nouveau secret dans votre repo :

github-secrets-publish-profile.png

Passons ensuite au workflow et aux étapes de déploiement.

 

Workflow de déploiement

Nous reprendrons ici le fichier workflow que nous avions commencé dans l'article sur l'intégration continue.

/.github/workflows/{workflow_name}.yml

 

Dans ce fichier, nous allons ajouter des étapes de déploiement, en commençant par déclarer un job que nous appelerons "deploy" et qui nécessite l'éxécution du job "build" au préalable.

nameASP.NET Core CI

on: [push]

jobs:
  build:
...
 
  deploy:

    needsbuild
    runs-onwindows-latest

 

La première étape consiste à récupérer le package de notre application, c'est-à-dire l'artifact. Pour cela, nous utiliserons l'action download-artifact en lui précisant le nom de l'artifact webapp.

    steps:
    - nameDownload Artifacts
      usesactions/download-artifact@master
      with:
        namewebapp

 

Nous voici enfin à l'étape tant attendue de déploiement.

Nous utiliserons ici l'action appservice-actions/webapp. Il faudra préciser à l'action le nom de la Web App, le nom du package, ainsi que le nom du Secret au format :

 secrets.{secret_name}.

    steps:
    - ...

    - nameDeploy to Azure App Service
      usesazure/appservice-actions/webapp@master
      with:
        app-nameactionsSampleApp
        packagewebapp
        publish-profile${{ secrets.webappPublishProfile }}

 

 

Il ne vous restera alors qu'à démarrer manuellement votre pipeline ou à attendre votre prochain commit sur master, via une PR évidemment ;)

github-actions-deploy-success.png

Conclusion

Dans cet article, nous avons découvert comment utiliser Github Actions 2.0 pour mettre en place un pipeline de déploiement continu en quelques minutes.

Dans un prochain article, nous découvrirons des fonctionnalités avancées de Github Actions pour Azure.

A bientôt !