带有dotnet和节点映像的GitLab管道



我正在创建一个GitLab管道,该管道应将buildtestdeploy作为dotnet核心应用程序和Angular应用程序。到目前为止一切都很好!

此项目是使用dotnet-clidotnet new angular创建的。

对于这个管道,我有一个默认图像:mcr.microsoft.com/dotnet/sdk:5.0.103

问题是,所有管道作业都需要节点安装,因为默认情况下,当我执行命令dotnet build时,它同时执行nodedotnetdotnet publish也是如此。默认情况下,这一切都在csproj文件中进行了配置。

为了解决这个问题,我在before_script部分添加了以下命令:

before_script:
- curl -sL https://deb.nodesource.com/setup_10.x | bash -
- apt-get install -y nodejs

管道正在工作,但我想知道这种方法是否可行,因为每个作业都会执行apt-get,这会导致管道中出现一些性能问题。

有没有办法让它更可靠?例如缓存?

我的管道是这样的:

image: mcr.microsoft.com/dotnet/sdk:5.0.103
stages:
- build
- tests
- deploy
variables:
CSPROJ_PATH: 'TechDay/TechDay.csproj'
before_script:
- curl -sL https://deb.nodesource.com/setup_10.x | bash -
- apt-get install -y nodejs
build:
stage: build
script:
- 'dotnet build $CSPROJ_PATH'
tests:
stage: tests
script:
- 'dotnet test $CSPROJ_PATH'
deploy:
stage: deploy
script:
- 'dotnet publish $CSPROJ_PATH'

我开始按照您的方式进行管道操作,但后来切换到为NPM构建步骤引入节点映像,并从.csproj文件中删除该步骤。这允许缓存节点映像,并大大提高了我的管道性能。然后,您必须在每个后续作业中定义.Net SDK映像,而不是全局定义。我在您的管道文件中添加了类似版本的设置。我假设您分别对客户端源位置和分发位置使用标准的ClientAppwwwroot结构。

stages:
- build
- tests
- deploy
variables:
CSPROJ_PATH: 'TechDay/TechDay.csproj'
NPM_ROOT: TechDay/ClientApp
NPM_DIST: TechDay/wwwroot
build-npm:
image: node:16
stage: build
script:
- cd $NPM_ROOT
- npm install
- npm run build
artifacts:
paths:
- $NPM_DIST/
expire_in: 20 minutes  
build:
image: mcr.microsoft.com/dotnet/sdk:5.0.103
stage: build
script:
- 'dotnet build $CSPROJ_PATH'
tests:
image: mcr.microsoft.com/dotnet/sdk:5.0.103
stage: tests
script:
- 'dotnet test $CSPROJ_PATH'
deploy:
image: mcr.microsoft.com/dotnet/sdk:5.0.103
stage: deploy
script:
- 'dotnet publish $CSPROJ_PATH'