- Fork deze GitHub repository
- Ga naar https://dev.azure.com/ en maak een nieuwe Azure DevOps Organization aan
- Vul een naam in voor jouw Azure DevOps Organization
- Locatie mag je zelf kiezen
- Creëer vervolgens een Private project binnen de zojuist gemaakte organisatie
Je hebt nu een leeg Azure DevOps project. We gaan hierbinnen een build pipeline en een release pipeline maken. In de build pipeline checken we het project uit van GitHub en gaan deze in Azure builden. Deze build gaan we vervolgens in de release pipeline releasen op een Azure App Service om deze vervolgens te deployen.
We gaan een build pipeline aanmaken en deze koppelen aan jouw fork van dit project. Op deze manier wordt jouw GitHub repository de codebase voor deze pipeline.
- Ga binnen jouw net aangemaakte project naar het tablad Pipelines en kies dan Pipelines
- Creëer een niewe pipeline
- Kies onderaan voor Use the classic editor
- Kies als source GitHub
- Kies Authorize using OAuth en doorloop de stappen op het pop-up scherm om AzurePipelines te autoriseren
- Selecteer vervolgens de geforkte repository
- Als laatste wordt gevraagd of je een template wilt selecteren om jouw build te definieren. In deze templates zijn al wat taken (build, publish, enzovoort) voor jou ingevuld. Aangezien dit een workshopdag is, gaan wij deze zelf definieren. Kies daarom bovin voor Empty job
In de zojuist gemaakte build pipeline zie je een Agent job 1. Deze agent voert Get sources uit om de code van GitHub af te halen. In deze stap gaan we Tasks aan de agent toevoegen zodat deze de dependencies in de code restored en de code vervolgens build.
- Voeg twee .NET Core tasks toe aan de agent. Vul bij beide tasks bij Path to project,
**/*.csproj
in- Een task om dependencies te restoren
- Een task om de code te builden
- Klik op Save & queue om de build pipeline op te slaan
- Klik op vervolgens op Save & run. Azure gaat nu een build maken van jouw code (duurt ongeveer 5 minunten). Als je op de agent klikt, kan je zien waar hij op dat moment mee bezig is.
Nu we een build kunnen maken, moet we twee tasks aan de agent toevoegen om de build te publishen en als artifact klaarzetten voor deployment. Bij het publishen wordt de build en zijn dependencies in een folder klaargezet als artifact. Dit artifact dient weer beschikbaar gesteld te worden aan de pipeline, zodat deze straks verderop in de pipeline opgepakt kan worden.
- Voeg, net als in de vorige stap, een .NET Core task toe aan de agent om het project te publishen
- Bij Arguments vul
-o "$(build.artifactstagingdirectory)"
in. Dit is de folder waarin jouw build en dependencies terecht komen, ofwel jouw Artifact - Laat de rest op default
- Bij Arguments vul
-
Voeg vervolgens een Publish build artifacts toe
-
Klik op Save & queue om de build pipeline op te slaan
-
Klik op vervolgens op Save & run. Azure gaat nu een build maken van jouw code publishen als artifact . Als je op de agent klikt, kan je zien waar hij op dat moment mee bezig is. Je kan alvast door met de volgende stap
Nu is het tijd om een App service te maken en in te stellen. Dit is de plek (server) waar de app straks komt te draaien.
-
Ga naar https://portal.azure.com/ en maak een nieuwe App Services aan
-
Selecteer jouw subscription
-
Create new Resource Group (geef leuke naam)
-
Geef een naam aan jouw instance (dit wordt de URL)
-
BELANGRIJK! Klik onderaan op Change size om een Free tier te kiezen onder Dev/Test
-
Klik vervolgens op Review + create en daarna op Create on de App service aan te maken
Nu we een App service beschikbaar hebben waarop we ons artifact kunnen gaan hosten, kunnen we de release pipeline gaan maken. Binnen de release pipeline geven we aan welk artifact we willen releasen en waar we deze willen deployen.
- Ga binnen jouw project (azure.dev) naar het tablad Pipelines en kies dan Releases
- Maak een New pipeline
- Selecteer Empty job
- Hernoem stage name naar Develop
- Klik op Add an artifact om jouw artifact toe te voegen aan de release pipeline
- Klik vervolgens op 1 job, 0 task onder Develop
- Voeg onder de Agent job een **Azure App Service deploy ** task toe. Hiermee kunnen we het artifact deployen op onze eerder gemaakte App service
- Kies de juiste subscription en App service name
- Laat Package or folder op de default waarde staan
- Druk op Save om de release pipeline op te slaan
Nu we eindelijk de build en release pipeline hebben gebouwd, kunnen we onze artifact gaan releasen.
- Ga naar het tabblad Pipelines en en kies dan Releases
- Klik op Create release
- Klik op Create
- Er wordt gelijk een release gestart
- Ga naar de App service in https://portal.azure.com/, daar zie je de URL naar jou app als de release klaar is
We hebben zojuist een app gereleased zonder dat we deze 'getest' hebben. Gelukkig bevat het project unit tests. Het uivoeren van deze unit tests gaan we toevoegen aan onze build pipeline. De tests gaan we uitvoeren na de build task en voor de publish task.
-
Ga naar het tabblad Pipelines en kies dan Pipelines
-
Klik op jouw build pipeline
-
Klik vervolgens op Edit om jouw build pipeline aan te passen
-
Voeg onder de Agent job een nieuwe .NET Core task toe om de Unit tests van het project te runnen (tussen de build en de publish)
- Bij Path to project(s) vul
**/*UnitTests/*.csproj
in. Dit is de folder waarin de unit tests staan
- Bij Path to project(s) vul
-
Ga tot slot weer terug naar het tabblad Pipelines en kies dan Pipelines
-
Klik jouw build pipeline aan en klik Run pipeline. De build pipeline gaat starten en zal vast lopen op de test. Een software engineer (uiteraard niet van Furore) heeft namelijk een fout in de code gemaakt... In de volgende stap gaan we dit fixen
Een goede software engineer is lui en wil daarom graag zo veel mogelijk automatiseren. Dat is precies wat we in deze stap gaan doen. Het handmatig aanzetten van de build en release pipelines is zonde tijd. In deze stap gaan we triggers instellen waardoor de build pipeline en daarna de release pipeline worden gestart, zodra jij een nieuwe commit naar GitHub pusht.
- Build trigger (Continuous Integration)
- Ga naar het tabblad Pipelines en kies dan Pipelines
- Klik op jouw build pipeline
- Klik vervolgens op Edit om jouw build pipeline aan te passen
- Naast het tabblad Tasks zie je het tabblad Triggers, klik hierop
- Vink vervolgens Enable continious integration aan en druk kies Save onder het kopje Save & queue
- Release trigger (Continious Delivery)
- Ga naar het tabblad Pipelines en kies dan Releases
- Klik vervolgens op Edit om jouw release pipeline aan te passen
- Rechtsboven jouw artifact zie je een trigger logo, klik hierop
- Zet vervolgens Create a release every time a new build is availabele op enabled, druk op het kruisje en Save vervolgens de release pipeline
Nu is het tijd om de fout te fixen en de oplossing naar GitHub te pushen. Deze push zal een nieuwe build en release triggeren.
- Fix de fout
- Push de oplossing naar GitHub
- Ga terug naar Azure DevOps en zie dat er een nieuwe build en release gestart zijn
Probeer de pipelines eens te bouwen middels YAML files, zie https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema%2Cparameter-schema
We hebben nu handmatig een CI/CD pipeline opgezet die getriggerd wordt door een push naar onze GitHub repo. Microsoft zou Microsoft niet zijn als je bovenstaande pipeline ook automatisch kan laten generen, zie DevOps Starter.