Tutorial: Uso de Azure Storage para crear artefactos

Importante

Muchos servicios de Azure tienen complementos de Jenkins. Algunos de estos complementos dejarán de ser compatibles a partir del 29 de febrero de 2024. La CLI de Azure es la forma recomendada actualmente de integrar Jenkins con los servicios de Azure. Para obtener más información, consulte el artículo Complementos de Jenkins para Azure.

Este artículo describe cómo usar Blob Storage como repositorio de artefactos de compilación creados por una solución de integración continua (CI) de Jenkins, o como origen de archivos descargables que se pueden usar en un proceso de compilación. Uno de los escenarios en los que esta solución le puede resultar útil es para codificar en un entorno de desarrollo ágil (usando Java u otros lenguajes), cuando las compilaciones se ejecutan según una integración continua y se necesita un repositorio para los artefactos de compilación, a fin de que, por ejemplo, se puedan compartir con otros miembros de la organización, con los clientes o para mantener un archivo. Otro es cuando su trabajo de compilación propiamente dicho requiere otros archivos, por ejemplo, la descarga de dependencias como parte de la entrada de compilación.

Requisitos previos

  • Suscripción de Azure: Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
  • Servidor Jenkins: si no tiene instalado un servidor Jenkins, cree un servidor Jenkins en Azure.
  • CLI de Azure: instale la CLI de Azure (versión 2.0.67 o posterior) en el servidor jenkins.
  • Cuenta de almacenamiento de Azure: si aún no tiene una cuenta de almacenamiento, cree una cuenta de almacenamiento.

Adición de la credencial de Azure necesaria para ejecutar la CLI de Azure

  1. Vaya al portal de Jenkins.

  2. En el menú, seleccione Manage Jenkins (Administrar Jenkins).

  3. Seleccione Manage Credentials (Administrar credenciales).

  4. Seleccione el dominio global.

  5. Seleccione Add Credentials (Agregar credenciales).

  6. Rellene los campos obligatorios de la siguiente manera:

    • Tipo: seleccione Nombre de usuario con contraseña.
    • Nombre de usuario: especifique el appId valor de la entidad de servicio.
    • Contraseña: especifique el password valor de la entidad de servicio.
    • Id. : especifique un identificador de credencial, como azuresp.
    • Descripción: opcionalmente, incluya una descripción significativa para su entorno.
  7. Seleccione OK (Aceptar) para crear la credencial.

Creación de un trabajo de canalización para cargar los artefactos de compilación

Los siguientes pasos le guían en la creación de un trabajo de canalización. El trabajo de canalización crea varios archivos y los carga en la cuenta de almacenamiento mediante la CLI de Azure.

  1. En el panel de Jenkins, seleccione New Item (Nuevo elemento).

  2. Asigne al trabajo el nombre myjob, seleccione Pipeline (Canalización) y, a continuación, seleccione OK (Aceptar).

  3. En la sección Pipeline (Canalización) de la configuración del trabajo, seleccione Pipeline script (Script de canalización) y pegue lo siguiente en el campo Script. Edite los marcadores de posición para que coincidan con los valores de su entorno.

    pipeline {
      agent any
      environment {
        AZURE_SUBSCRIPTION_ID='99999999-9999-9999-9999-999999999999'
        AZURE_TENANT_ID='99999999-9999-9999-9999-999999999999'
        AZURE_STORAGE_ACCOUNT='myStorageAccount'
      }
      stages {
        stage('Build') {
          steps {
            sh 'rm -rf *'
            sh 'mkdir text'
            sh 'echo Hello Azure Storage from Jenkins > ./text/hello.txt'
            sh 'date > ./text/date.txt'
          }
    
          post {
            success {
              withCredentials([usernamePassword(credentialsId: 'azuresp', 
                              passwordVariable: 'AZURE_CLIENT_SECRET', 
                              usernameVariable: 'AZURE_CLIENT_ID')]) {
                sh '''
                  echo $container_name
                  # Login to Azure with ServicePrincipal
                  az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
                  # Set default subscription
                  az account set --subscription $AZURE_SUBSCRIPTION_ID
                  # Execute upload to Azure
                  az storage container create --account-name $AZURE_STORAGE_ACCOUNT --name $JOB_NAME --auth-mode login
                  az storage blob upload-batch --destination ${JOB_NAME} --source ./text --account-name $AZURE_STORAGE_ACCOUNT
                  # Logout from Azure
                  az logout
                '''
              }
            }
          }
        }
      }
    }
    
  4. Seleccione Build Now (Compilar ahora) para ejecutar myjob.

  5. Examine el resultado de la consola para consultar el estado. Cuando la acción posterior a la compilación carga los artefactos de compilación, los mensajes de estado de Azure Storage se escriben en la consola.

  6. Si se produce un error similar al siguiente, significa que necesita conceder acceso en el nivel de contenedor: ValidationError: You do not have the required permissions needed to perform this operation. Si recibe este mensaje de error, consulte los artículos siguientes para resolver:

  7. Tras completar el trabajo satisfactoriamente, abra el blob público para examinar los artefactos de compilación.

    1. Inicie sesión en Azure Portal.
    2. Seleccione Storage.
    3. Seleccione el nombre de la cuenta de almacenamiento que ha usado para Jenkins.
    4. Seleccione Contenedores.
    5. Seleccione el contenedor llamado myjob dentro de la lista de blobs.
    6. Debería ver los dos archivos siguientes: hello.txt y date.txt.
    7. Copie la dirección URL de cualquiera de estos elementos y péguela en el explorador.
    8. Verá el archivo de texto que se ha cargado como un artefacto de compilación.

    Puntos clave:

    • Los nombres de los contenedores y los nombres de los blobs se guardan en minúscula en el almacenamiento de Azure y, además, distinguen mayúsculas de minúsculas.

Creación de un trabajo de canalización para descargar desde Azure Blob Storage

En los siguientes pasos se muestra cómo configurar un trabajo de canalización para descargar elementos desde Azure Blob Storage.

  1. En la sección Pipeline (Canalización) de la configuración del trabajo, seleccione Pipeline script (Script de canalización) y pegue lo siguiente en el campo Script. Edite los marcadores de posición para que coincidan con los valores de su entorno.

    pipeline {
      agent any
      environment {
        AZURE_SUBSCRIPTION_ID='99999999-9999-9999-9999-999999999999'
        AZURE_TENANT_ID='99999999-9999-9999-9999-999999999999'
        AZURE_STORAGE_ACCOUNT='myStorageAccount'
      }
      stages {
        stage('Build') {
          steps {
            withCredentials([usernamePassword(credentialsId: 'azuresp', 
                            passwordVariable: 'AZURE_CLIENT_SECRET', 
                            usernameVariable: 'AZURE_CLIENT_ID')]) {
              sh '''
                # Login to Azure with ServicePrincipal
                az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
                # Set default subscription
                az account set --subscription $AZURE_SUBSCRIPTION_ID
                # Execute upload to Azure
                az storage blob download --account-name $AZURE_STORAGE_ACCOUNT --container-name myjob --name hello.txt --file ${WORKSPACE}/hello.txt --auth-mode login
                # Logout from Azure
                az logout
              '''   
            }
          }
        }
      }
    }
    
  2. Después de ejecutar una compilación, compruebe la salida de la consola del historial de compilación. Como alternativa, también puede consultar la ubicación de descarga para ver si los blobs esperados se descargaron correctamente.

Pasos siguientes