首页 > 解决方案 > Windows 上的 Gitlab docker runner:msbuild 失败

问题描述

几个月来,我使用几个共享的跑步者来运行我的 GitLab CI 工作。我所有的跑步者都在 linux 主机或 macOS 上运行,效果很好!这项工作是使用 mono:latest 图像编译 .Net 标准项目。

我将 msbuild 与 nugget restore 一起使用,这是我的问题。我最近在Windows上添加了我的第一个共享运行器,仍然像往常一样使用 docker 运行器,如此处所述这是我一直这样做的方式)。但是有了这个新的Windows共享运行器,只有这个,当 msbuild 从我们的本地(子网)块存储库恢复块包时,我的工作失败了。

我尝试在另一台 Windows 主机上安装另一个 docker 运行器和同样的问题。我收到了这个错误:

错误:无法加载源 http://skirnir/NuGet/index.json 的服务索引错误:不知道这样的主机

Skirnir 是托管我的 nugget 包的本地服务器。我从我的工作中尝试“curl http://login:pwd@skirnir/NuGet/index.json”并且它可以工作,因此当使用单图像从容器内执行 msbuild 时,它可以访问 Skirnir!但是 msbuild restore 总是无法获取包。我试图用它的 IP 替换 skirnir 但同样的问题,因为 index.json 在“@id”中引用了skirnir:“http://skirnir/NuGet/”。

这是我的 gitlab 工作:

cache:
  key: "$CI_JOB_NAME"
  paths:
    - packages

variables:
  MAIN_DIR: "Proj1"

before_script:
  - nuget help > /dev/null
  - cp $HOME/.config/NuGet/NuGet.Config .
  - nuget sources add -Name skirnir_ci -Source http://skirnir/NuGet/index.json -UserName $NUGET_USER -Password $NUGET_PASSWORD -configfile $(pwd)/NuGet.Config
  - export NUGET_PACKAGES=$(pwd)/packages

build pcl:
  image: mono
  stage: build
  tags:
    - docker
  retry: 2
  only:
    - tags
    - branches
    - web
  variables:
    PROJECT: "Proj1"
  script:
    - export MSBUILD_PROP="/p:Configuration=Release;RestoreConfigFile=$(pwd)/NuGet.Config"
    - msbuild /t:restore "$MSBUILD_PROP" $MAIN_DIR/$PROJECT/$PROJECT.csproj
    - msbuild "$MSBUILD_PROP" $MAIN_DIR/$PROJECT/$PROJECT.csproj

任何想法?

标签: dockermsbuildgitlabnugetgitlab-ci-runner

解决方案


推荐阅读