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!
Si quieres seguir aprendiendo sobre contenedores, tienes una lista de vídeos en mi canal de YouTube 👇🏻
Docker CLI: Comandos esenciales que todo developer debe conocer
Domina los Dockerfiles: De lo básico a multi-stage
4 formas de crear un Dockerfile sin empezar desde cero
¿No entiendes las redes en Docker? Mira este vídeo
Cómo NO perder tus datos en Docker: Guía definitiva
Deja de configurar contenedores a mano: Aprende Docker Compose 🐙
Cómo subir tus imágenes a Docker Hub (Guía paso a paso)
Publica y automatiza tus imágenes de Docker con GitHub


¿Qué son los contenedores? Docker desde cero para principiantes
return(GiS); julio 10, 2024 10:00 am