Integreer Git & Jenkins voor Geplande PowerShell-scripts

Als jij en je team veel te veel PowerShell-scripts hebben liggen die God weet waar draaien, dan is dit artikel iets voor jou. In dit artikel ga je leren hoe je de populaire Jenkins-automatiseringsserver kunt opzetten om PowerShell-scripts te beheren en uit te voeren!

Je leert hoe je Git-versiebeheer integreert met Jenkins om vervolgens PowerShell-scripts in te stellen en te plannen om op vooraf bepaalde schema’s uit te voeren.

PowerShell Script Sprawl: Dit Werkt Niet

Als automatiseringsingenieur was een van de belangrijkste uitdagingen die mijn team en ik moesten overwinnen, geplande PowerShell-script-uitbreiding. Ik vond tientallen PowerShell-scripts die waren gepland en uitgevoerd vanaf veel verschillende plaatsen.

Elke ingenieur of elk team van ingenieurs had zijn eigen server waarop ze dingen inplanden. Elk type script werd uitgevoerd op de server die die service draaide.

  • A domain controller ran all of the Active Directory scripts.
  • Een Exchange-server voerde bijvoorbeeld alle Exchange-scripts uit.
  • A member server ran all networking team scripts.
  • A member server ran all of the database scripts for the DBAs.
  • A member server ran all of the security team’s scripts.
  • … en zo verder

Alle code die op een van deze servers draaide, werd ofwel opgeslagen als een scriptbestand in een tijdelijke map op die server of als een scriptmap op een gedeelde schijf. Het was een nachtmerrie!

Geloof het of niet, voor het grootste deel werkte dit systeem prima. Scripts werden uitgevoerd zoals gewenst en we hadden hoe dan ook back-ups op alle servers. Er ging nooit code verloren.

Het was begrijpelijk dat iedereen tevreden was met deze status quo. Het verbeteren van dit systeem stond niet hoog op de prioriteitenlijst.

Maar dit systeem was niet zonder zijn gebreken. Hoewel het voldeed aan de behoeften van sommige ingenieurs, kon het niet eindeloos worden opgeschaald of gemakkelijk worden onderhouden. Dit systeem liet ook geen enkele flexibiliteit toe in de geplande taken. Deze starheid leidde tot tien versies van hetzelfde script (met kleine aanpassingen) die werden ingepland.

Enter Jenkins.

Waarom Jenkins?

Van alle opties die je hebt om PowerShell-scripts in te plannen en uit te voeren, waarom kies je voor Jenkins? Het gebruik van een Jenkins-server om PowerShell-scripts uit te voeren biedt vele voordelen. Hier zijn een paar hoogtepunten:

Betere Controle

Zodra al je PowerShell-scripts op één plek staan, hoef je je niet meer af te vragen op welke server een script wordt uitgevoerd. Je kunt nu dat script vergeten dat je twee jaar geleden hebt geschreven en dat nu verouderd is en een of andere serviceaccount blokkeert.

Je kunt scripts organiseren in een gemakkelijk navigeerbare mapstructuur, precies controleren waar al je scripts daadwerkelijk worden uitgevoerd en zelfs pipelines gebruiken om grote monolithische scripts op te splitsen in kleinere modulaire brokken die kunnen worden hergebruikt in meerdere taken.

Gemakkelijke Planning

Met Jenkins heb je een enkele, centrale plek met volledige ondersteuning voor het plannen van de uitvoering van PowerShell-scripts. Je kunt verschillende scripts plannen om op verschillende tijdstippen met verschillende parameters uit te voeren, een mooie web-GUI hebben voor het beheren van schema’s en meer.

Versiebeheer

Het hebben van PowerShell-scripts onder een soort versiebeheer lost veel verschillende problemen op. Een daarvan is de mogelijkheid om te integreren met tools zoals Jenkins. Jenkins kan integreren met Git en andere versiebeheerproducten om automatisch de nieuwste versie op te halen.

Gecentraliseerd loggen

Wanneer PowerShell-scripts overal verspreid zijn en logs creëren, kunnen logs overal verspreid raken. Met Jenkins krijg je uitstekende logging in een leesbaar uitvoervenster op een website in plaats van door een of ander logbestand te moeten graven dat je geplande taak heeft gemaakt.

Vereisten/Benodigdheden

Dit artikel zal een stapsgewijze handleiding zijn over hoe Jenkins moet worden ingesteld om PowerShell-scripts uit te voeren. Als zodanig heb je een paar dingen nodig om mee te doen.

Installeren van de PowerShell Plugin

Om PowerShell-scripts met Jenkins uit te voeren, moet je de PowerShell-plugin installeren. Ga hiervoor naar de hoofdpagina:

  1. Klik op Beheer Jenkins en vervolgens op Beheer Plugins.
  2. Klik op het tabblad Beschikbaar.
  3. Aan de rechterkant van het scherm typ je powershell in het Filter-vak. Je zou dan de PowerShell-plugin moeten zien verschijnen zoals hieronder wordt getoond.
Looking for the PowerShell extension

4.  Selecteer het selectievakje Installeren en klik op Installeren zonder herstart.

5. Het installeren van de PowerShell-plugin zal een optie voor de Windows PowerShell bouwstap creëren wanneer je later het PowerShell-script invoert om uit te voeren.

Het maken van een taak

Jenkins heeft een concept van taken. Een taak is een reeks instructies die je aan Jenkins kunt geven om te weten welke scripts uit te voeren, schema’s te volgen, enzovoort. In dit gedeelte maak je een taak aan die een PowerShell-script zal uitvoeren. Hiervoor stel je een taak in die een Git-repository kloont in Jenkins.

  1. Eenmaal ingelogd op Jenkins, klik op Nieuw item in de rechterbovenhoek.
New Item menu option

2. Vervolgens krijg je het onderstaande scherm te zien. Selecteer Freestyle-project. Dit type taak biedt de meeste flexibiliteit.

Creating a new Jenkins project

3. Geef de taak de naam Hello World en klik op OK.

Using Hello World for the project name

4. Je zou nu op het Taakconfiguratie-scherm moeten zijn. Je zou nu een sectie genaamd Broncodebeheer moeten zien zoals hieronder weergegeven. Hiermee kun je aangeven welke Git-repo Jenkins moet klonen om beschikbaar te maken voor de taak. Kies voor deze demo Git.

Source Code Management option

5. Wanneer je op Git klikt, zou je nu een optie moeten zien die vraagt om de informatie van je Git-repository. Dit is de Git-repo die je PowerShell-scripts bevat.

Setting the Git repo

Hieronder volgt een uitleg van elk veld:

  • Repository-URL – De URL die wijst naar de Git-opslagplaats. In TFS kan de URL er bijvoorbeeld zo uitzien: *http://SERVERNAME:8080/tfs//Messaging/_git/Dynamic Distro List*
  • Credentials – Een gebruikersnaam/wachtwoord die toegang heeft tot de opslagplaats. Als je nog geen referentie hebt ingesteld, kun je er een maken door op Toevoegen te klikken.
  • Naam – Dit kan leeg gelaten worden.
  • Refspec – Dit kan leeg gelaten worden.
  • Branch-specifier – Hiermee kunt u kiezen welke branch u wilt gebruiken voor deze taak. Standaard haalt het de master-branch op, maar als u een andere testbranch wilt gebruiken, kunt u deze hier specificeren.

U kunt ook meer dan één opslagplaats klonen voor een taak door op de knop Opslagplaats toevoegen hierboven te klikken. Dit is handig als u modules of andere afhankelijkheden heeft die u nodig heeft in een aparte opslagplaats.

Het toevoegen van de Windows PowerShell-bouwstap

Misschien heeft u een script in de hoofdmap van de Git-repo’s master-branch genaamd Hello World.ps1. In dit script heeft u een enkele regel:

Write-Host "Hello World, I'm a Jenkins build!"

U wilt dit script uitvoeren wanneer de taak wordt uitgevoerd. Om dit te doen, moet u een bouwstap maken.

Jenkins staat toe dat u talrijke bouwstappen per taak specificeren. Voor uw doeleinden moet u een Windows PowerShell-bouwstap toevoegen. Om dit te doen, op het scherm voor taakconfiguratie:

  1. Klik op de knop Bouwstap toevoegen en kies Windows PowerShell.
Windows PowerShell Build step

2. Binnen in de Commando-box, dot source het PowerShell-script dat zich in je Git-repo bevindt, zoals hieronder getoond. Je ziet dat we een PowerShell omgevingsvariabele genaamd WORKSPACE gebruiken. Deze variabele vertegenwoordigt de huidige werkmap (de hoofdmap van het Git-repo).

Running the Hello World.ps1 script

3. Klik nu op Opslaan om de taak op te slaan.

Je zou nu een taak moeten hebben ingesteld om een PowerShell-script uit een Git-repo aan te roepen!

Uitvoeren van het PowerShell-script

Nu je een taak hebt aangemaakt, voer deze uit en bekijk de output.

  1. Zorg ervoor dat je op het hoofdscherm van de taak bent. Als je de naam Hello World hebt gebruikt voor deze taak, is de standaard-URL http://localhost:8080/job/Hello world/.
  2. Op het hoofdscherm van de taak, klik op Nu bouwen aan de linkerkant zoals hieronder getoond.
Running the build

Door op Nu bouwen te klikken, wordt onmiddellijk een build van de huidige taak gestart. Voor taken die complex zijn en lang duren om uit te voeren, heb je de mogelijkheid om op de build te klikken en de output in realtime te zien terwijl het wordt uitgevoerd. In dit geval zal de taak echter praktisch direct worden uitgevoerd.

4. Om de resultaten te zien, klik op het groene vinkje naast de build.

Inspecting build results

Als alles volgens plan is verlopen, zie je iets als het volgende in je output:

Build log results

Roosters en Triggers

Je hebt nu een taak die kan worden uitgevoerd wanneer dat nodig is en die het bericht Hallo wereld weergeeft. Maar een van de belangrijke voordelen van Jenkins is het vervangen van geplande taken. We willen niet telkens handmatig hoeven in te grijpen en het uit te voeren. Als je die taak opnieuw opent, zie je een sectie met de naam Bouwtriggers.

Available build triggers

Dit zijn je opties om een taak uit te voeren zonder dat je op Nu bouwen in Jenkins hoeft te klikken.

Het maken van een schema

Er zijn verschillende opties om triggers te maken. Laten we het in dit voorbeeld eenvoudig houden.

  1. Selecteer Periodiek bouwen. Met deze trigger kun je taken plannen met behulp van een cron-achtige planningsyntax.

2. Stel de taak in om te draaien om 7:30 uur op maandag, woensdag en vrijdag zoals hieronder weergegeven.

Setting schedule to 7:30AM MWF

3. Sla de wijzigingen op en wacht.

Wanneer de toegewezen datum en tijd zich voordoen, zie je vervolgens dat het script zoals gewenst is uitgevoerd onder Bouwgeschiedenis.

Build running on schedule

Je hebt nu een PowerShell-script gepland in Jenkins dat op regelmatige basis wordt uitgevoerd.

Verdere lezing

Source:
https://adamtheautomator.com/powershell-jenkins/