Así es como lo haría usando Github:
jobs: run-tests: runs-on: ubuntu-latest defaults: run: working-directory: ./MyApp steps: - uses: actions/checkout@v2 - name: Setup .NET uses: actions/setup-dotnet@v1 with: dotnet-version: 5.0.x - name: Restore dependencies run: dotnet restore - name: Build project run: dotnet build --no-restore - name: Run tests run: dotnet test --no-build Esta vez en Gitlab, el archivo de la solución de mi proyecto está en el directorio raíz del repositorio. Creé un archivo .gitlab-ci.yml y comencé con
image: mcr.microsoft.com/dotnet/sdk:5.0 stages: - restore-dependencies - build-solution - run-tests restore-dependencies: stage: restore-dependencies script: - dotnet restore --packages packages artifacts: paths: - packages build-solution: stage: build-solution script: - dotnet build --no-restore --source packages --output build artifacts: paths: - build dependencies: - restore-dependencies run-tests: stage: run-tests script: - dotnet test --no-build --output build dependencies: - build-solution El primer trabajo pasa pero el segundo falla porque no puede encontrar los archivos restaurados del primer trabajo. Entonces mi solución tiene un TestProject1 y el segundo trabajo no puede encontrar un archivo de recursos en ...\TestProject1\obj\project.assets.json
¿Cómo puedo arreglar la configuración de la canalización?
Está utilizando trabajos separados para ejecutar cada comando. Gitlab ejecuta cada trabajo en un nuevo contenedor, destruyendo cualquier contexto del comando anterior, excepto los artefactos especificados explícitamente. Para ejecutar comandos secuenciales como los que ha configurado en las acciones de Github, simplemente puede agregar varios pasos que se ejecutarán secuencialmente en la misma imagen, preservando el contexto entre los comandos.
stages: - build-solution run-tests: image: mcr.microsoft.com/dotnet/sdk:5.0 stage: build-solution script: - dotnet restore - dotnet build --no-restore - dotnet test --no-buildAlternativamente , podría usar artefactos y banderas para transferir la salida de cada comando entre trabajos:
Creo que los artefactos deben ser rutas relativas a su $CI_PROJECT_DIR (fuente) y, de acuerdo con la documentación de dotnet restore , la ubicación de escritura predeterminada está en el directorio de inicio.
Puede intentar especificar la ubicación de escritura como paquetes/con dotnet restore --packages packages (fuente)
y la ubicación de lectura como paquetes/ con dotnet build --source packages (fuente)
Entonces necesitarías especificar este artefacto como:
artifacts: paths: - packages Necesitaría un uso similar del indicador --output para guardar su artefacto de compilación en la etapa build-solution .
Esto es más complicado, pero puede ser deseable en algunos casos.
Esta no es una respuesta digna, pero podría ayudar. Lo reproduje y tuve los mismos problemas. De alguna manera esto funcionó para mí
image: mcr.microsoft.com/dotnet/sdk:5.0 stages: - build-solution - run-tests build-solution: stage: build-solution script: - dotnet build --output build artifacts: paths: - build run-tests: stage: run-tests script: - dotnet test --no-build --output build dependencies: - build-solutionPor lo tanto, es posible que desee olvidarse de la etapa de restauración porque siempre debe compilarse primero...
Tal vez valga la pena intentar definir la canalización como un gráfico acíclico dirigido (DAG), por lo que en lugar de definir dependencies en su paso, podría definir needs . Cuando se define un trabajo con la palabra clave de needs , solo se iniciará si todos los trabajos anteriores dependientes tuvieron éxito (excepto si se les permite fallar). La ventaja de la palabra clave de needs aquí sería que puede configurar explícitamente el paso para descargar los artefactos de los trabajos anteriores
image: mcr.microsoft.com/dotnet/sdk:5.0 stages: - restore-dependencies - build-solution - run-tests restore-dependencies: stage: restore-dependencies script: - dotnet restore --packages packages artifacts: paths: - packages build-solution: stage: build-solution script: - dotnet build --no-restore --source packages --output build artifacts: paths: - build needs: - job: restore-dependencies artifacts: true run-tests: stage: run-tests script: - dotnet test --no-build --output build needs: - job: build-solution artifacts: true