我有一个.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的名称, 功能,脚本文件或可操作程序。检查拼写 名称,或者是否包含路径,请验证路径是否正确,以及 再试一次。
答案 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/