Uso del SDK de .NET en entornos de integración continua (CI)

En este artículo se resume el uso del SDK de .NET y sus herramientas en un servidor de compilación. El conjunto de herramientas de .NET funciona tanto de manera interactiva, donde un desarrollador escribe comandos en un símbolo del sistema, como de manera automática, donde un servidor de integración continua (CI) ejecuta un script de compilación. Los comandos, las opciones, las entradas y las salidas son los mismos, y solo lo que el usuario especifica sirve para adquirir las herramientas y un sistema para compilar la aplicación. Este artículo se centra en escenarios de adquisición de herramientas de integración continua, donde además se ofrecen recomendaciones sobre cómo diseñar y estructurar los scripts de compilación.

Opciones de instalación para los servidores de compilación de CI

Si usa GitHub, la instalación es sencilla. Puede confiar en Acciones de GitHub para instalar el SDK de .NET en el flujo de trabajo. La manera recomendada de instalar el SDK de .NET en un flujo de trabajo es con la acción actions/setup-net-core-sdk. Para más información, consulte la acción Setup .NET Core SDK en el marketplace de GitHub. Para ejemplos de cómo funciona, consulte Inicio rápido: Creación de un flujo de trabajo de GitHub de validación de compilaciones.

Instaladores nativos

Los instaladores nativos están disponibles para macOS, Linux y Windows. Los instaladores requieren acceso de administrador (sudo) para el servidor de compilación. El instalador nativo ofrece la ventaja de que instala todas las dependencias nativas necesarias para la ejecución de las herramientas. Además, los instaladores nativos instalan el SDK en todo el sistema.

Los usuarios de macOS deben usar los instaladores PKG. En Linux, se ofrece la posibilidad de usar un administrador de paquetes basado en fuentes, como apt-get para Ubuntu o yum para CentOS, o de usar los mismos paquetes (DEB o RPM). En Windows, utilice el instalador MSI.

Los archivos binarios estables más recientes se encuentran en Descargas de .NET. Si desea utilizar las herramientas de la última versión preliminar, que posiblemente sean inestables, use los vínculos proporcionados en el repositorio de GitHub dotnet/installer. Para las distribuciones de Linux, se encuentran disponibles los archivos tar.gz (conocidos también como tarballs); use los scripts de instalación dentro de los archivos para instalar .NET.

Script del instalador

El uso del script del instalador permite la instalación sin derechos administrativos en el servidor de compilación y una sencilla automatización para obtener las herramientas. El script se encarga de descargar las herramientas y extraerlas en una ubicación predeterminada o especificada para su uso. También puede especificar la versión de las herramientas que desea instalar y si prefiere instalar el SDK completo o solo el runtime compartido.

El script del instalador se puede automatizar para que se ejecute al principio de la compilación, a fin de obtener e instalar la versión deseada del SDK. La versión deseada se corresponde con cualquier versión del SKD que los proyectos necesitan para la compilación. El script permite instalar el SDK en un directorio local del servidor, ejecutar las herramientas desde la ubicación de instalación y limpiar después de la compilación, o bien dejar que el servicio de CI realice dicha limpieza. Esto permite encapsular y aislar todo el proceso de compilación. La referencia del script de instalación se encuentra en el artículo dotnet-install.

Nota:

Azure DevOps Services

Cuando se utiliza el script del instalador, las dependencias nativas no se instalan automáticamente. Debe instalarlas en caso de el sistema operativo no las incluya. Para obtener más información, vea Dependencias y requisitos de .NET.

Ejemplos de configuración de CI

En esta sección se explica un procedimiento de instalación manual con un script de PowerShell o de Bash, y se incluyen descripciones de soluciones de CI de software como servicio (SaaS). Las soluciones de CI de SaaS tratadas son Travis CI, AppVeyor y Azure Pipelines. Para Acciones de GitHub, consulte Acciones de GitHub y .NET.

Instalación manual

Cada servicio de SaaS tiene sus propios métodos para crear y configurar un proceso de compilación. Si usa una solución de SaaS distinta a las que indican o necesita realizar alguna personalización aparte de la compatibilidad preconfigurada, debe realizar al menos alguna configuración manual.

En general, para realizar una instalación manual, es necesario que adquiera una versión de las herramientas o las últimas compilaciones nocturnas de las herramientas y que, después, ejecute el script de compilación. Puede usar un script de PowerShell o bash para orquestar los comandos de .NET, o bien utilizar un archivo del proyecto en el que se describa el proceso de compilación. En la sección de orquestación se ofrece más información sobre estas opciones.

Después de crear un script que realiza una instalación manual del servidor de compilación de CI, úselo en el equipo de desarrollo para compilar el código de forma local con fines de pruebas. Cuando confirme que el script se ejecuta de forma correcta en el entorno local, impleméntelo en el servidor de compilación de CI. Un script de PowerShell relativamente sencillo demuestra cómo obtener el SDK de .NET e instalarlo en un servidor de compilación de Windows:

Debe proporcionar la implementación para el proceso de compilación al final del script. El script adquiere las herramientas y, después, ejecuta el proceso de compilación.

$ErrorActionPreference="Stop"
$ProgressPreference="SilentlyContinue"

# $LocalDotnet is the path to the locally-installed SDK to ensure the
#   correct version of the tools are executed.
$LocalDotnet=""
# $InstallDir and $CliVersion variables can come from options to the
#   script.
$InstallDir = "./cli-tools"
$CliVersion = "6.0.7"

# Test the path provided by $InstallDir to confirm it exists. If it
#   does, it's removed. This is not strictly required, but it's a
#   good way to reset the environment.
if (Test-Path $InstallDir)
{
    rm -Recurse $InstallDir
}
New-Item -Type "directory" -Path $InstallDir

Write-Host "Downloading the CLI installer..."

# Use the Invoke-WebRequest PowerShell cmdlet to obtain the
#   installation script and save it into the installation directory.
Invoke-WebRequest `
    -Uri "https://dot.net/v1/dotnet-install.ps1" `
    -OutFile "$InstallDir/dotnet-install.ps1"

Write-Host "Installing the CLI requested version ($CliVersion) ..."

# Install the SDK of the version specified in $CliVersion into the
#   specified location ($InstallDir).
& $InstallDir/dotnet-install.ps1 -Version $CliVersion `
    -InstallDir $InstallDir

Write-Host "Downloading and installation of the SDK is complete."

# $LocalDotnet holds the path to dotnet.exe for future use by the
#   script.
$LocalDotnet = "$InstallDir/dotnet"

# Run the build process now. Implement your build script here.

Travis CI

Puede configurar Travis CI para instalar el SDK de .NET con el lenguaje csharp y la clave dotnet. Para más información, consulte los documentos oficiales de Travis CI en Building a C#, F#, or Visual Basic Project (Compilación de un proyecto de C#, F# o Visual Basic). Al acceder a la información de Travis CI, observará que el identificador de lenguaje language: csharp de cuyo mantenimiento se encarga la comunidad funciona con todos los lenguajes de .NET, incluidos F# y Mono.

Travis CI se ejecuta tanto en trabajos de macOS como de Linux en una matriz de compilación, donde debe especificar una combinación de runtime, entorno y exclusiones / inclusiones para aceptar las combinaciones de compilación de la aplicación. Para más información, vea el artículo Customizing the Build (Personalización de la compilación) en la documentación de Travis CI. Las herramientas basadas en MSBuild incluyen los runtimes de soporte a largo plazo (LTS) y soporte en plazo estándar (STS) en el paquete; por tanto, al instalar el SDK, recibe todo lo que necesita para la compilación.

AppVeyor

AppVeyor instala el SDK de .NET 6 con la imagen de trabajo de compilación de Visual Studio 2022. Hay otras imágenes de compilación disponibles con distintas versiones del SDK de .NET. Para obtener más información, consulte Build worker images (Imágenes de trabajo de compilación) en los documentos de AppVeyor.

Los archivos binarios del SDK de .NET se descargan y descomprimen en un subdirectorio mediante el script de instalación y, después, se agregan a la variable de entorno PATH. Agregue una matriz de compilación para ejecutar las pruebas de integración con varias versiones del SDK de .NET:

environment:
  matrix:
    - CLI_VERSION: 6.0.7
    - CLI_VERSION: Latest

Azure DevOps Services

Configure Azure DevOps Services para compilar proyectos de .NET mediante alguno de estos enfoques:

  • Ejecute el script del paso de instalación manual con sus comandos.
  • Cree una compilación compuesta de varias tareas de compilación integradas en Azure DevOps Services configuradas para usar herramientas de .NET.

Ambas soluciones son válidas. Con la utilización de un script de instalación manual, puede controlar la versión de las herramientas que recibe, ya que las descarga como parte de la compilación. La compilación se ejecuta desde un script que debe crear. En este artículo solo se trata la opción manual. Para más información sobre cómo elaborar una compilación con las tareas de compilación de Azure DevOps Services, consulte la documentación de Azure Pipelines.

Para usar un script de instalación manual en Azure DevOps Services, cree una definición de compilación y especifique el script que va a ejecutar para el paso de compilación. Esto se realiza en la interfaz de usuario de Azure DevOps Services:

  1. Empiece por crear una definición de compilación. Cuando llegue a la pantalla en la que se ofrece la opción de definir el tipo de compilación que desea crear, seleccione la opción Vacío.

    Selecting an empty build definition

  2. Después de configurar el repositorio que va a compilar, se le remite a las definiciones de compilación. Seleccione Agregar paso de compilación:

    Adding a build step

  3. Se abre el Catálogo de tareas. El catálogo contiene tareas que se utilizan en la compilación. Como ya tiene un script, seleccione el botón Agregar en PowerShell: Ejecute un script de PowerShell.

    Adding a PowerShell script step

  4. Configure el paso de compilación. Agregue el script desde el repositorio que se va a compilar:

    Specifying the PowerShell script to run

Orquestación de la compilación

En la mayor parte de este documento se describe cómo adquirir las herramientas de .NET y configurar varios servicios de CI sin ofrecer información sobre cómo orquestar o compilar realmente el código con .NET. Las opciones para estructurar el proceso de compilación dependen de muchos factores que no se pueden tratar aquí en términos generales. Para más información sobre cómo orquestar las compilaciones con cada tecnología, explore los recursos y los ejemplos que se proporciona en los conjuntos de documentación de Travis CI, AppVeyor y Azure Pipelines.

Dos enfoques generales que se aplican para estructurar el proceso de compilación del código de .NET mediante herramientas de .NET consisten en usar directamente MSBuild, o bien usar los comandos de la línea de comandos de .NET. El enfoque que debe adoptar depende de lo cómo que se sienta con cada uno de ellos y de los inconvenientes que presente su complejidad. MSBuild ofrece la posibilidad de expresar el proceso de compilación como tareas y objetivos, pero presenta la complejidad añadida de tener que aprender la sintaxis del archivo de proyecto de MSBuild. Es posible que sea más sencillo usar las herramientas de línea de comandos de .NET, pero, en este caso, es necesario escribir la lógica de orquestación en un lenguaje de scripting como bash o PowerShell.

Sugerencia

Una propiedad de MSBuild en la que deseará establecer true es ContinuousIntegrationBuild. Esta propiedad habilita la configuración que solo se aplica a las compilaciones oficiales, en lugar de las compilaciones de desarrollo locales.

Consulte también