Esercitazione: Distribuire app in App Spring di Azure usando Jenkins e l'interfaccia della riga di comando di Azure
Nota
Azure Spring Apps è il nuovo nome del servizio Azure Spring Cloud. Anche se il servizio ha un nuovo nome, il nome precedente verrà visualizzato in alcune posizioni per un po' mentre si lavora per aggiornare gli asset, ad esempio screenshot, video e diagrammi.
Azure Spring Apps è uno sviluppo di microservizi completamente gestito con l'individuazione dei servizi e la gestione della configurazione predefinita. Il servizio semplifica la distribuzione di applicazioni di microservizi basate su Spring Boot in Azure. Questa esercitazione illustra come usare l'interfaccia della riga di comando di Azure in Jenkins per automatizzare l'integrazione e il recapito continui (CI/CD) per App Spring di Azure.
In questa esercitazione si completeranno le attività seguenti:
- Effettuare il provisioning di un'istanza del servizio e avviare un'applicazione Java Spring
- Preparare il server Jenkins
- Usare l'interfaccia della riga di comando di Azure in una pipeline Jenkins per compilare e distribuire le applicazioni di microservizi
Prerequisiti
- Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
- Jenkins: Installare Jenkins in una macchina virtuale Linux
- Account GitHub: se non si ha un account GitHub, creare un account gratuito prima di iniziare.
Effettuare il provisioning di un'istanza del servizio e avviare un'applicazione Java Spring
La metrica Piggy viene usata come applicazione di servizio Microsoft di esempio e viene seguita la stessa procedura descritta in Avvio rapido: Avviare un'applicazione Java Spring usando l'interfaccia della riga di comando di Azure per effettuare il provisioning dell'istanza del servizio e configurare le applicazioni. Se è già stato eseguito lo stesso processo, è possibile passare alla sezione successiva. In caso contrario, di seguito sono inclusi i comandi dell'interfaccia della riga di comando di Azure. Per altre informazioni, vedere Avvio rapido: Avviare un'applicazione Java Spring usando l'interfaccia della riga di comando di Azure.
Il computer locale deve soddisfare lo stesso prerequisito del server di compilazione Jenkins. Verificare che siano installati i componenti seguenti per compilare e distribuire le applicazioni di microservizi:
- Git
- JDK 8
- Maven 3.0 o versione successiva
- L'interfaccia della riga di comando di Azure versione 2.0.67 o superiore installata
Installare l'estensione Azure Spring Apps:
az extension add --name spring
Creare un gruppo di risorse per contenere il servizio Azure Spring Apps:
az group create --location eastus --name <resource group name>
Effettuare il provisioning di un'istanza di Azure Spring Apps:
az spring create -n <service name> -g <resource group name>
Creare una copia tramite fork del repository Piggy Metrics per il proprio account GitHub. Nel computer locale clonare il repository in una directory denominata
source-code
:mkdir source-code git clone https://github.com/<your GitHub id>/piggymetrics
Configurare il server di configurazione. Assicurarsi di sostituire il <proprio ID GitHub> con il valore corretto.
az spring config-server git set -n <your-service-name> --uri https://github.com/<your GitHub id>/piggymetrics --label config
Compilare il progetto:
cd piggymetrics mvn clean package -D skipTests
Creare i tre microservizi gateway, auth-service e account-service:
az spring app create --n gateway -s <service name> -g <resource group name> az spring app create --n auth-service -s <service name> -g <resource group name> az spring app create --n account-service -s <service name> -g <resource group name>
Distribuire le applicazioni:
az spring app deploy -n gateway -s <service name> -g <resource group name> --jar-path ./gateway/target/gateway.jar az spring app deploy -n account-service -s <service name> -g <resource group name> --jar-path ./account-service/target/account-service.jar az spring app deploy -n auth-service -s <service name> -g <resource group name> --jar-path ./auth-service/target/auth-service.jar
Assegnare un endpoint pubblico al gateway:
az spring app update -n gateway -s <service name> -g <resource group name> --is-public true
Eseguire una query sull'applicazione gateway per ottenere il relativo URL in modo da verificare se è in esecuzione.
az spring app show --name gateway | grep url
Passare all'URL specificato dal comando precedente per eseguire l'applicazione PiggyMetrics.
Preparare il server Jenkins
In questa sezione verrà preparato il server Jenkins per eseguire una compilazione corretta per i test. Tuttavia, per motivi di sicurezza, è necessario usare un agente di VM di Azure o un agente di contenitore di Azure per creare un agente in Azure che esegua le compilazioni.
Installare i plug-in
Accedere al server Jenkins.
Selezionare Manage Jenkins (Gestisci Jenkins).
Selezionare Manage Plugins (Gestisci plug-in).
Nella scheda Disponibili selezionare i plug-in seguenti:
Se questi plug-in non sono inclusi nell'elenco, passare alla scheda Installati per verificare se sono già installati.
Per installare i plug-in, selezionare Scarica ora e installa dopo il riavvio.
Riavviare il server Jenkins per completare l'installazione.
Aggiungere le credenziali dell'entità servizio di Azure nell'archivio delle credenziali di Jenkins
Per eseguire la distribuzione in Azure, è necessaria un'entità servizio di Azure. Per altre informazioni, vedere la sezione Creare l'entità servizio dell'esercitazione Eseguire la distribuzione in Servizio app di Azure. L'output di
az ad sp create-for-rbac
è simile al seguente:{ "appId": "xxxxxx-xxx-xxxx-xxx-xxxxxxxxxxxx", "displayName": "xxxxxxxjenkinssp", "name": "http://xxxxxxxjenkinssp", "password": "xxxxxx-xxx-xxxx-xxx-xxxxxxxxxxxx", "tenant": "xxxxxx--xxx-xxxx-xxx-xxxxxxxxxxxx" }
Nel dashboard di Jenkins selezionare Credentials>System (Credenziali > Sistema). Quindi, selezionare Global credentials(unrestricted) (Credenziali globali senza restrizioni).
Selezionare Aggiungi credenziali.
Selezionare Entità servizio di Microsoft Azure come tipo.
Fornire i valori per i campi seguenti:
- ID sottoscrizione: ID sottoscrizione di Azure
- ID client: id appid dell'entità servizio
- Segreto client: password dell'entità servizio
- ID tenant: ID tenant dell'account Microsoft
- Ambiente Azure: selezionare il valore appropriato per l'ambiente in uso. Usare ad esempio Azure per Azure globale
- ID: impostare su
azure_service_principal
. L'ID verrà usato in un passaggio successivo dell'articolo - Descrizione: questo valore è facoltativo, ma consigliato dal punto di vista della documentazione/manutenzione.
Installare l'estensione Spring dell'interfaccia della riga di comando di Azure e Maven
La pipeline di esempio usa Maven per compilare e l'interfaccia della riga di comando di Azure per la distribuzione nell'istanza del servizio. Quando viene installato, Jenkins crea un account amministratore denominato jenkins. Assicurarsi che l'utente jenkins disponga dell'autorizzazione per eseguire l'estensione spring.
Connessione al controller Jenkins tramite SSH.
Installare Maven.
sudo apt-get install maven
Verificare che l'interfaccia della riga di comando di Azure sia installata immettendo
az version
. Se l'interfaccia della riga di comando di Azure non è installata, vedere Installazione dell'interfaccia della riga di comando di Azure.Passare all'utente
jenkins
:sudo su jenkins
Installare l'estensione spring:
az extension add --name spring
Creare un Jenkinsfile
Nel repository:
https://github.com/your_github_id/piggymetrics
creare un file Jenkins nella radice.Aggiornare il file come segue. Assicurarsi di sostituire i valori del nome> del gruppo di risorse e <del nome> del <servizio. Sostituire azure_service_principal con l'ID corretto se è stato usato un valore diverso quando sono state aggiunte le credenziali in Jenkins.
node { stage('init') { checkout scm } stage('build') { sh 'mvn clean package' } stage('deploy') { withCredentials([azureServicePrincipal('azure_service_principal')]) { // Log in to Azure sh ''' az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID az account set -s $AZURE_SUBSCRIPTION_ID ''' // Set default resource group name and service name. Replace <resource group name> and <service name> with the right values sh 'az config set defaults.group=<resource group name>' sh 'az config set defaults.spring=<service name>' // Deploy applications sh 'az spring app deploy -n gateway --jar-path ./gateway/target/gateway.jar' sh 'az spring app deploy -n account-service --jar-path ./account-service/target/account-service.jar' sh 'az spring app deploy -n auth-service --jar-path ./auth-service/target/auth-service.jar' sh 'az logout' } } }
Salvare la modifica ed eseguirne il commit.
Creare il processo
Nel dashboard di Jenkins selezionare Nuovo elemento.
Specificare il nome Deploy-PiggyMetrics per il processo e selezionare Pipeline. Fare clic su OK.
Selezionare la scheda Pipeline.
Per Definition selezionare Pipeline script from SCM.
Per SCM selezionare Git.
Immettere l'URL di GitHub per il repository con fork:
https://github.com/<your GitHub id>/piggymetrics.git
.Per Identificatore di ramo (nero per "any"), selezionare /Azure.
Per Percorso script selezionare Jenkinsfile.
Seleziona Salva
Convalidare ed eseguire il processo
Prima di eseguire il processo, modificare il testo nella casella di input dell'account di accesso per immettere l'ID di accesso.
Nel repository aprire
index.html
in/gateway/src/main/resources/static/
.enter your login
Cercare e aggiornare il testo inenter login ID
.<input class="frontforms" id="frontloginform" name="username" placeholder="enter login ID" type="text" autocomplete="off"/>
Salvare la modifica ed eseguirne il commit.
Eseguire manualmente il processo in Jenkins. Nel dashboard di Jenkins selezionare il processo
Deploy-PiggyMetrics
e quindi selezionare Compila adesso.
Al termine del processo, passare all'indirizzo IP pubblico dell'applicazione e verificare che l'applicazione gateway
sia stata aggiornata.
Pulire le risorse
Quando non sono più necessarie, eliminare le risorse create in questo articolo:
az group delete -y --no-wait -n <resource group name>