GitLab Runner 从 gitlab 启动时无法恢复 nuget 包,但在本地启动时可以

Mat*_*art 2 continuous-integration nuget gitlab gitlab-ci gitlab-ci-runner

我正在尝试使用 gitlab CI 构建和测试 .NET 项目。

我已经下载并安装了最新版本的 GitLab runner,并成功地将它注册到了我们的 gitlab 实例。我创建了以下.gitlab-ci.yaml文件:

variables:
  Solution: Performance-Validation-Tool.sln

stages:
  - build
  - test
#  - deploy

build:
  stage: build
  script:
  - echo "Restoring NuGet packages..."
  - 'C:/nuget/NuGet.exe restore'
  - echo building...
  - 'msbuild.exe "%Solution%"'
  except:
  - tags

test:
  stage: test
  script:
  - echo testing...
  - 'msbuild.exe "%Solution%"'
  - dir /s /b *.Tests.dll | findstr /r Tests\\*\\bin\\ > testcontainers.txt
  - 'for /f %%f in (testcontainers.txt) do mstest.exe /testcontainer:"%%f"'
  except:
  - tags
Run Code Online (Sandbox Code Playgroud)

重要的部分是构建操作。

如果我从 Gitlab 本身运行构建,我会收到所有 nugget 包的以下错误:

WARNING: Unable to find version '3.5.0' of package 'NUnit.Console'.

  C:\Windows\system32\config\systemprofile\AppData\Local\NuGet\Cache: Package 'NUnit.Console.3.5.0' is not found on source 'C:\Windows\system32\config\systemprofile\AppData\Local\NuGet\Cache'.

  https://api.nuget.org/v3/index.json: Unable to load the service index for source https://api.nuget.org/v3/index.json.

  An error occurred while sending the request.

  The remote name could not be resolved: 'api.nuget.org'
Run Code Online (Sandbox Code Playgroud)

但是,如果我在本地运行以下命令:

C:\GitlabRunner\gitlab-ci-multi-runner-windows-amd64.exe exec shell build
Run Code Online (Sandbox Code Playgroud)

一切正常...

我为 gitlab runner 和 nugget.exe 创建了防火墙例外(我下载并安装了最新版本的 nugget.exe)

gitlab runner 服务以我用来运行手动 exec 命令的相同帐户登录。

我对 gitlab 触发的构建和手动 exec 命令使用了相同的 nugget.exe。

我们在公司代理后面,没有设置 HTTP_PROXY 环境变量。代理在“互联网选项”中配置。我确实尝试为 nugget.exe 定义 HTTP_PROXY 设置,但后来在阅读 nugget.exe 默认使用系统代理后将其删除。

在此先感谢您的帮助!

Mat*_*art 6

我碰巧查看了服务列表中的服务,注意到虽然我已经明确指定了该服务的用户,但它是使用“本地系统”帐户创建的,我认为该帐户缺少代理设置。该服务已得到纠正,现在可以正确构建。