如何在.net解决方案中运行git命令在gitlab中构建管道

时间:2020-05-22 16:21:23

标签: .net git docker msbuild gitlab-ci

我有一个.net存储库,该存储库依赖于另一个存储库,因此我将另一个存储库用作子模块。

我正在使用此docker映像构建存储库

image: mcr.microsoft.com/dotnet/framework/sdk

但是要使用子模块,我必须获取最新的子模块,并且可以使用类似git的命令来完成

before_script:
  - git submodule sync --recursive
  - git submodule update --init --recursive

但是git命令在docker映像中不可用,因此无法显示git is not recognized

谁能帮助我,使git可用该怎么做?

我尝试了很多事情,例如将构建分为两个阶段,并尝试对git等使用不同的docker映像。但是没有任何事情可以完全满足我的要求。

更新

这是.gitlab-ci.yml文件,其中包含jmaitrehenry在其答案中建议的解决方案

stages:
   - build


variables:
    GIT_SUBMODULE_STRATEGY: recursive

before_script:
    - docker build -t git-for-windows-issue

# Build
Build:
  image: mcr.microsoft.com/dotnet/framework/sdk
  stage: build
  script:
    - echo Ok
  only:
    - branches
  tags:
    - windows-runner
  environment:
    name: development

但这也给出了这个错误

docker:术语“ docker”未被识别为cmdlet的名称, 功能,脚本文件或可操作程序。检查拼写 名称,或者是否包含路径,请验证路径是否正确,以及 再试一次。

2 个答案:

答案 0 :(得分:1)

如果您的gitlab运行程序不太旧(v1.10 +),则可以在管道中添加它:

variables:
  GIT_SUBMODULE_STRATEGY: recursive

有了它,gitlab在克隆/准备项目时将为您进行同步和更新。

如果不能,则需要在映像中安装git。您可以检查此仓库以帮助您在Windows上使用git:https://github.com/StefanScherer/dockerfiles-windows/tree/master/git-for-windows-issue 您可以将其添加到before_script:

before_script:
  - Invoke-WebRequest 'https://github.com/git-for-windows/git/releases/download/v2.15.1.windows.2/MinGit-2.15.1.2-busybox-64-bit.zip' -OutFile 'mingit.zip' -UseBasicParsing
  - Expand-Archive mingit.zip -DestinationPath c:\mingit ; \
  - Remove-Item mingit.zip -Force ; \
  - c:\mingit\cmd\git.exe submodule sync --recursive
  - c:\mingit\cmd\git.exe submodule update --init --recursive

Gitlab文件:https://docs.gitlab.com/ee/ci/git_submodules.html 如何在Windows上安装git:

答案 1 :(得分:0)

您可以使用Cake脚本来处理其他.net生成过程,还可以创建可重用的任务 https://cakebuild.net/dsl/git/