Azure DevOps

Un CD/CI con Azure en mi día a día

Un pipeline para tu proceso de CD/CI puedes configurarlo de muchas maneras.

Te vamos a contar cómo es uno de los nuestros, qué tareas forman el pipeline para hacer la build, y cómo hemos configurado cada una de ellas.

Tareas importantes en nuestro particular CD/CI

Decimos particulares porque no serán necesarias para todos los proyectos. En nuestro caso, tenemos varias que nos gustaría comentar.

Este es nuestro listado en concreto.

PowerShell Script

Esta tarea la empleamos porque nuestro proyecto en Umbraco necesita actualizar la versión del css y js en cada build. El script que utilizamos para llevar a cabo el proceso es este:

$fileName = 'ClientDependency.config'

# ------------------------------

$filePath = ('{0}\{1}' -f (Get-Location), $fileName)
$fileContents = (Get-Content $fileName)

$version = (Get-Date -UFormat %s -Millisecond 0)
echo "New version: $version - $filePath"

$fileContents = $fileContents -replace `
    '(clientDependency version=")([^"]*)(")', `
    ('clientDependency version="{0}"' -f $version)

[IO.File]::WriteAllLines($filePath, $fileContents)

El resto de opciones de la task podemos dejarla como vienen por defecto.

File Transform

En plena build precisamos también una transformación en xml de un fichero de nuestra configuración. Para eso usamos esta tarea.

En «Package or folder» elegimos la carpeta donde se encuentran los ficheros que queremos aplicar, marcamos el check de XML transformation, y colocamos las reglas de transformación que queremos. En nuestro caso:

-transform uSyncBackOffice.Azure.config -xml uSyncBackOffice.config

Como «File format», elegimos XML, claro.

Build solution

La configuración que viene por defecto a la hora de explotar la solución de Visual Studio, la modificamos un poco. Para ello, aplicamos lo siguiente:

/p:SkipInvalidConfigurations=true /p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactstagingdirectory)\build\\" /p:DeployDefaultTarget=WebPublish /p:autoparameterizationwebconfigconnectionstrings=false

Manteniendo el resto de opciones tal y como vienen.

NPM

Tres cuartos de lo mismo. Al utilizar webpack en nuestro proyecto, nos viene bien lanzar un comando de npm que se aplique en la build. Para ello, le damos un nombre, como es un comando personalizado elegimos «Custom» en command, y en la línea de comandos y argumentos colocamos la sentencia npm que queramos aplicar.

Nosotros usamos la siguiente:

run prod

Nada del otro mundo.

¿Necesitas cachear esta tarea en Azure? Echa un vistazo a este enlace.

Copy Files

A veces es conveniente copiar un fichero en un lugar concreto que el propio proceso de CD/CI no contempla. Nosotros queremos copiar un fichero file.lic en la carpeta bin de nuestra solución.

Para hacer esto seleccionamos en Source Folder la ruta donde se encuentra el fichero.

En «Contents» ponemos: **.lic

Y como Target Folder, utilizamos esta ruta: $(build.artifactstagingdirectory)/build/bin

El resto de opciones, por defecto.

Archive Files

Para acelerar el proceso de subir los ficheros de la build al slot, estamos usando la tarea de compresión de Azure DevOps.

La configuración empleada es:

En «Root folder or file to archive»: $(build.artifactstagingdirectory)/build

Y en «Archive file to create»: $(Build.ArtifactStagingDirectory)/build.zip

Elige el tipo de formato al que quieres comprimir (nosotros «zip»), y marca «Replace existing archive».

El resto de opciones, podemos dejarlas por defecto.

Publish Artifact

En la última tarea hemos modificado el «Path to publish» para que pueda recoger el fichero comprimido de la tarea anterior.

Puedes poner en «Path to publish» esto: $(build.artifactstagingdirectory)/build.zip

Y listo. Con eso generamos nuestro CD/CI en cuestión de poquitos minutos.

Más información: Microsoft Azure DevOps

José María

Ingeniero de formación, es un apasionado de pantallas, teclas, códigos, matemáticas y jeroglíficos varios; cuenta con un enfermizo síndrome obsesivo-compulsivo por el detalle y el trabajo bien hecho.