Se tu e il tuo team avete troppe script di PowerShell che girano chissà dove, questo articolo è per voi. In questo articolo imparerai come configurare il popolare server di automazione Jenkins per gestire ed eseguire gli script PowerShell!
Imparerai come integrare il controllo di versione di Git con Jenkins per poi configurare e pianificare gli script PowerShell da eseguire secondo orari predefiniti.
Diffusione degli Script PowerShell: Questo Non Funziona
Come ingegnere di automazione, una delle sfide principali che il mio team e io abbiamo dovuto affrontare è stata la diffusione programmata degli script PowerShell. Ho trovato dozzine di script PowerShell programmati ed eseguiti da molti luoghi diversi.
Ogni ingegnere o team di ingegneri aveva il proprio server su cui programmare le attività. Ogni tipo di script veniva eseguito sul server che gestiva quel servizio.
- A domain controller ran all of the Active Directory scripts.
- Un server Exchange eseguiva tutti gli script di Exchange.
- 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.
- …e così via
Tutto il codice che veniva eseguito su uno qualsiasi di questi server era salvato come file di script in una directory temporanea su quel server o come cartella di script su un drive condiviso. Era un incubo!
Ci crediate o no, per la maggior parte, questo sistema funzionava bene. Gli script venivano eseguiti come desiderato e avevamo comunque i backup su tutti i server. Nessun codice andava mai perso.
È comprensibile che tutti fossero contenti di questo stato quo. Migliorare questo sistema non era in cima alla lista delle priorità.
Ma questo sistema non era senza difetti. Sebbene soddisfacesse le esigenze di alcuni ingegneri, non era in grado di scalare o essere facilmente mantenibile nel tempo. Questo sistema non consentiva nemmeno alcuna flessibilità nelle attività pianificate. Questa rigidità ha portato a dieci versioni dello stesso script (con piccole modifiche) programmate.
Entra in gioco Jenkins.
Perché Jenkins?
Di tutte le opzioni che hai per pianificare ed eseguire script PowerShell, perché scegliere Jenkins? Utilizzare un server Jenkins per eseguire script PowerShell offre molti vantaggi. Ecco alcuni punti salienti:
Maggior controllo
Una volta che hai tutti i tuoi script PowerShell in un unico posto, non devi più chiederti su quale server viene eseguito uno script. Ora puoi dimenticare lo script che hai scritto due anni fa, che è ormai obsoleto e sta bloccando un account di servizio.
Puoi organizzare gli script in una struttura di cartelle facilmente navigabile, controllare esattamente dove vengono effettivamente eseguiti tutti i tuoi script e persino utilizzare pipeline per suddividere script monolitici in blocchi modulari più piccoli che possono essere riutilizzati in più lavori.
Pianificazione facile
Con Jenkins, hai un unico punto centrale con pieno supporto per la pianificazione dell’esecuzione degli script PowerShell. Puoi pianificare l’esecuzione di script diversi in tempi diversi con parametri diversi, avere una bella interfaccia web per gestire le pianificazioni e altro ancora.
Controllo delle versioni
Avere script di PowerShell sotto controllo di versione risolve molti problemi diversi. Uno di questi è la possibilità di integrarsi con strumenti come Jenkins. Jenkins può integrarsi con Git e altri prodotti di controllo di versione per estrarre automaticamente l’ultima versione.
Logging consolidato
Quando gli script di PowerShell sono sparsi ovunque e creano log, i log possono essere dispersi ovunque. Con Jenkins, si ottiene un’eccellente registrazione in una finestra di output leggibile su un sito web invece di dover cercare in un file di log creato dal tuo compito pianificato.
Prerequisiti/Requisiti
Questo articolo sarà una guida su come configurare Jenkins per eseguire script di PowerShell. Pertanto, avrai bisogno di alcune cose per seguirla.
- A running Jenkins server
- Git installato sul tuo server Jenkins o agente di build
- A Git repo set up containing your PowerShell scripts (Be sure you know the repo URL)
- Plugin Git di Jenkins
Installazione del plugin di PowerShell
Per eseguire script di PowerShell con Jenkins, dovrai installare il plugin di PowerShell. Per farlo, nella pagina principale:
- Fai clic su Gestisci Jenkins e poi su Gestisci plugin.
- Fai clic sulla scheda Disponibile.
- Sul lato destro dello schermo, digita powershell nella casella di Filtro. Dovresti quindi vedere comparire il plugin di PowerShell come mostrato di seguito.

4. Seleziona la casella Installa e fai clic su Installa senza riavvio.
5. Installando il plugin di PowerShell verrà creato un’opzione di passaggio di build di Windows PowerShell quando fornisci lo script di PowerShell da eseguire un po’ più tardi.
Creazione di un lavoro
Jenkins ha un concetto di lavori. Un lavoro è un insieme di istruzioni che puoi fornire a Jenkins per sapere quali script eseguire, quali programmi seguire, ecc. Creerai un lavoro in questa sezione che eseguirà uno script di PowerShell. Per farlo, imposterai un lavoro che clonerà un repository Git in Jenkins.
- Una volta effettuato l’accesso a Jenkins, clicca su Nuovo elemento nell’angolo in alto a destra.

2. Ti verrà quindi fornita la schermata mostrata di seguito. Seleziona Progetto Freestyle. Questo tipo di lavoro consentirà la massima flessibilità.

3. Assegna al lavoro il nome Hello World e clicca su OK.

4. Dovresti essere ora nella schermata di Configurazione del lavoro. Dovresti ora vedere una sezione chiamata Gestione del codice sorgente come mostrato di seguito. Questo ti consente di specificare quale repository Git Jenkins clonerà per renderlo disponibile per il lavoro. Per questa demo, scegli Git.

5. Quando clicchi su Git, dovresti ora vedere un’opzione che ti chiede le informazioni sul tuo repository Git. Questo è il repository Git che contiene i tuoi script di PowerShell.

Di seguito è riportato un’analisi di ogni campo:
- URL del repository – L’URL che punta al repository Git. In TFS, ad esempio, l’URL potrebbe apparire così: *http://NOMESERVER:8080/tfs//Messaging/_git/Dynamic Distro List*
- Credenziali – Un nome utente/password che ha accesso al repository. Se non hai già impostato le credenziali, puoi crearne una cliccando su Aggiungi.
- Nome – Questo può essere lasciato vuoto.
- Refspec – Questo può essere lasciato vuoto.
- Branch Specifier – Questo ti permette di scegliere quale branch vuoi che questo lavoro utilizzi. Per impostazione predefinita, estrarrà il branch master, ma se hai un altro branch di test che vuoi utilizzare, puoi specificarlo qui.
Puoi anche clonare più di un repository per un lavoro utilizzando il pulsante Aggiungi Repository sopra. Questo è utile se hai moduli o altre dipendenze di cui hai bisogno in un repository separato.
Aggiunta del passaggio di compilazione di Windows PowerShell
Forse hai uno script nella radice del branch master del repository Git chiamato Hello World.ps1. All’interno di questo script, hai una singola riga:
Vuoi eseguire questo script quando il lavoro viene eseguito. Per farlo, dovrai creare un passaggio di compilazione.
Jenkins ti permette di specificare numerosi passaggi di compilazione per lavoro. Per i tuoi scopi, devi aggiungere un passaggio di compilazione Windows PowerShell. Per farlo, nella schermata di configurazione del lavoro:
- Clicca sul pulsante Aggiungi passaggio di compilazione e scegli Windows PowerShell.

Dentro della casella Command, importa lo script PowerShell situato nel tuo repository Git come mostrato di seguito. Puoi vedere che stiamo utilizzando una variabile d’ambiente PowerShell chiamata WORKSPACE
. Questa variabile rappresenta la directory di lavoro corrente (la cartella principale del repository Git).

3. Ora clicca su Salva per salvare il lavoro.
Dovresti ora avere un lavoro configurato per invocare uno script PowerShell da un repository Git!
Esecuzione dello script PowerShell
Ora che hai creato un lavoro, eseguilo e dai un’occhiata all’output.
- Assicurati di essere nella schermata principale del lavoro. Se hai usato il nome Hello World per questo lavoro, l’URL predefinito sarà http://localhost:8080/job/Hello world/.
- Nella schermata principale del lavoro, clicca su Genera ora sul lato sinistro come mostrato di seguito.

Cliccando su Genera ora si avvia immediatamente una compilazione del lavoro corrente. Per lavori che sono complessi e richiedono del tempo per essere eseguiti, avrai la possibilità di cliccare sulla compilazione e vedere l’output in tempo reale mentre viene eseguito. In questo caso, tuttavia, il lavoro verrà eseguito praticamente istantaneamente.
4. Per vedere i risultati, clicca sul segno di spunta verde accanto alla compilazione.

Se tutto è andato come previsto, vedrai qualcosa di simile al seguente nel tuo output:

Orari e trigger
Ora hai un lavoro che può essere eseguito quando necessario e che produce il messaggio Hello World. Ma uno dei principali punti di vendita di Jenkins è quello di sostituire i compiti pianificati. Non vogliamo dover entrare e eseguirlo manualmente. Se riapri quel lavoro, vedrai una sezione chiamata Trigger di Build.

Queste sono le tue opzioni per far eseguire un lavoro senza richiedere di fare clic su Build Now in Jenkins.
Creare un orario
Ci sono diverse opzioni diverse per creare trigger. In questo esempio, manteniamolo semplice.
- Seleziona Build periodicamente. Questo trigger ti consente di pianificare lavori utilizzando una sintassi di pianificazione simile a cron.
2. Imposta il lavoro per essere eseguito alle 7:30 del lunedì, mercoledì e venerdì come mostrato di seguito.

3. Salva le modifiche e attendi.
Quando si verificano la data e l’ora assegnate, vedrai quindi lo script eseguito come desiderato in Build History.

Ora hai uno script PowerShell pianificato in Jenkins che verrà eseguito a intervalli ricorrenti.