Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在gitlab的.net解决方案构建管道中运行git命令_.net_Git_Docker_Msbuild_Gitlab Ci - Fatal编程技术网

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

如何在gitlab的.net解决方案构建管道中运行git命令,.net,git,docker,msbuild,gitlab-ci,.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命令

我有一个.net存储库,它依赖于另一个存储库,因此我使用另一个存储库作为子模块

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

image: mcr.microsoft.com/dotnet/framework/sdk
但是要使用子模块,我必须获得子模块的最新版本,这可以通过像这样的git命令来完成

before_script:
  - git submodule sync --recursive
  - git submodule update --init --recursive
但是git命令在docker映像中不可用,因此它无法说
git不可识别

有人能帮我做些什么让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的名称, 函数、脚本文件或可操作程序。检查单词的拼写 名称,或者如果包含路径,请验证该路径是否正确,并且 再试一次


如果您的gitlab runner不太老(v1.10+),您可以将其添加到管道中:

variables:
  GIT_SUBMODULE_STRATEGY: recursive
这样,gitlab将在克隆/准备项目时为您执行同步和更新

如果不能,则需要在映像中安装git。您可以检查此回购以帮助您在windows上使用git: 您可以将其添加到before_脚本中:

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文档:
如何在windows上安装git:

您可以使用cake脚本,该脚本也将处理其他.net构建过程,并且您可以创建可重用的任务

我已经在使用这个
GIT\u子模块\策略:递归
,它确实说它正在更新模块,但似乎什么都没做。我尝试用docker安装了一些东西,但问题是docker命令无法使用此映像。它会出现以下错误
docker:术语“docker”无法识别为cmdlet的名称,
您能否使用gitlab和runner版本添加gitlab-ci.yml文件?gitlab在容器中运行脚本指令,这就是为什么没有docker。您可以从我的链接中查看dockerfile中的一个,查看git是如何安装的,并尝试在
before\u脚本中执行相同的操作。我在尝试运行的问题中发布了我的yml文件的非常基本的版本。请检查我在windows上添加更多关于git的说明,你能添加gitlab版本和gitlab runner版本吗?谢谢!!它起作用了:)投票并选择了你的答案:)只有两个问题,为什么这行不起作用了::SecurityProtocol=[Net.SecurityProtocolType]::Tls12
,为什么路径没有设置成这个,
-setx/M path$('c:\mingit\cmd;{0}'-f$env:path)