Otro de los escenarios con el que he estado jugando es con la integración de Jenkins y los despliegues en Microsoft Azure. En este artículo voy a repetir el proceso de creación de la imagen de Docker, subida a Azure Container Registry y el despliegue en Web App for containers, que te mostré en el despliegue de Drupal pero desde Jenkins.
Pipeline de Jenkins
En la pipeline de Jenkins voy a replicar los pasos de la pipeline de build del despliegue de Drupal:

y también la pipeline de release:

El resultado sería el siguiente:
pipeline {
environment {
docker_image_name = "drupalrepo.azurecr.io/0gis0/drupal-webapp-for-containers"
registry = "https://drupalrepo.azurecr.io"
registryCredential = 'acr_credentials'
git_repo = 'https://github.com/0gis0/drupal-webapp-for-containers.git'
git_branch = 'master'
tag = "$BUILD_NUMBER"
staging_url = 'http://drupal-from-jenkins-staging.azurewebsites.net'
}
agent {
label 'ubuntu'
}
stages {
stage('Cloning Git') {
steps {
git(branch: git_branch,
credentialsId: 'github_private_repository',
url: git_repo)
}
}
stage('Build the image') {
steps{
script {
docker_image = docker.build docker_image_name + ':$tag'
}
}
}
stage('Push the image') {
steps{
script {
docker.withRegistry(registry, registryCredential) {
docker_image.push()
}
}
}
}
stage('Remove Unused docker image') {
steps{
sh "docker rmi $docker_image_name:$tag"
}
}
stage('Deploy docker image in Web App for Containers on Azure'){
steps{
azureWebAppPublish(
appName: 'drupal-from-jenkins',
azureCredentialsId: '917891d4-7095-4390-b368-05d656e99fbc',
skipDockerBuild: true,
dockerImageName: docker_image_name,
dockerImageTag: "$tag",
dockerRegistryEndpoint: [credentialsId: 'acr_credentials', url: 'https://drupalrepo.azurecr.io'],
publishType: 'docker',
resourceGroup: 'Deploy-From-Jenkins',
slotName: 'staging'
)
sleep time: 2, unit: 'MINUTES'
sh '''#!/bin/bash
echo "warming up the site"
while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' $staging_url)" != "200" ]]; do sleep 5; done
'''
script {
sh 'curl $staging_url/en/articles'
sh 'curl $staging_url/en/recipes'
sh 'curl $staging_url/es'
sh 'curl $staging_url/es/articles'
sh 'curl $staging_url/es/recipes'
}
}
}
stage('Pass to production'){
steps{
azureWebAppSwapSlots(
azureCredentialsId: '917891d4-7095-4390-b368-05d656e99fbc',
resourceGroup: 'Deploy-From-Jenkins',
appName: 'drupal-from-jenkins',
sourceSlotName: 'staging',
targetSlotName: 'production'
)
}
}
}
}
Para poder lanzar esta pipeline debes tener instalado el plugin de Azure App Service. Además, debes de dar de alta en el apartado de Credentials de tu Jenkins tus credenciales de Azure, como te mostré en la creación de agentes dinámicos de Jenkins en Microsoft Azure, y las credenciales de tu Azure Container Registry, del tipo username and password, obteniendo las mismas desde el propio recurso.
¡Saludos!

Bootcamp DevOps
Si tienes ganas de meterte en el área de DevOps, formo parte del
equipo de docentes del Bootcamp DevOps Lemoncode, ¿Te animas a
aprender con nosotros?