在我公司,我们使用 Visual Studio 2017 Professional 进行大部分开发。我们现在正在设置构建服务器,然后我们要安装 Visual Studio 构建工具。
我们之前已经成功完成了这项工作,但是现在我们的构建服务器没有 Internet 连接。按照本指南,无论如何都应该可以安装 Visual Studio 构建工具:https : //docs.microsoft.com/en-us/visualstudio/install/create-an-offline-installation-of-visual-studio?view =vs-2017
根据指南,您应该从命令行创建本地缓存。我已经这样做了,通过:
运行此命令:
vs_buildtools__1995328593.1509370754.exe --layout c:\VS_BuildTools2017_offline --add Microsoft.VisualStudio.Workload.MSBuildTools --add Microsoft.VisualStudio.Workload.VCTools --lang en-US --includeOptional
(--includeOptional 标志包含许多并非真正需要的额外内容。它可以替换为--includeRecommended。)
它在 C:\VS_BuildTools2017_offline 中创建了缓存,我将该文件夹复制到构建服务器。我已使用以下命令验证本地和服务器上的缓存是否良好:
vs_buildtools__1995328593.1509370754.exe
--layout C:\VS_BuildTools2017_offline
--verify
Run Code Online (Sandbox Code Playgroud)
要安装,我首先只运行了这个命令:
vs_buildtools__1995328593.1509370754.exe
--add Microsoft.VisualStudio.Workload.MSBuildTools
--add Microsoft.VisualStudio.Workload.VCTools
--includeOptional
Run Code Online (Sandbox Code Playgroud)
该命令打开了安装程序 GUI,我可以在其中添加或删除组件。单击下一步后,安装程序尝试从 Internet 下载更多软件包,由于没有 Internet 连接,这当然失败了:
九次尝试后,下载以下文件出现问题,需要继续:https : //download.visualstudio.microsoft.com/download/pr/1de262ec-7472-432e-aeac-5faba4582d01/8d4d2cb3863cda850f87ee6e3e881fae/ .vsix
选择重试以再次尝试下载文件。
选择取消以取消 Visual Studio 安装。
我试图在安装时包含更少的包,但它做同样的事情。
经过更多搜索,我找到了这个链接:https : //developercommunity.visualstudio.com/content/problem/303465/inability-to-install-build-tools-for-visual-studio.html
这听起来有点像我遇到的问题,在这种情况下的原因是某些组件需要安装证书。如果未安装它们,则安装程序会尝试从 Internet …
我们有一些本地安装程序和 zip 文件,用于构建 docker 映像。让它在 Dockerfile 中工作很容易:
FROM mcr.microsoft.com/windows/nanoserver
COPY myinstaller.exe .
RUN myinstaller.exe; \
del myinstaller.exe
Run Code Online (Sandbox Code Playgroud)
这里的问题是它为 COPY 线生成了一个图层,这增加了图像的大小。一种常见的解决方法是使用一个 RUN 行,从 Internet 下载文件,运行命令,然后删除安装文件。如上所述,问题在于安装程序位于本地文件系统上。
我发现docker有一个--squash命令:
docker build --squash -t mytestimage .
Run Code Online (Sandbox Code Playgroud)
这正是我想要的:它为我提供了一个图像,而没有这个不必要的额外安装程序文件。要运行此命令,您需要启用实验性功能。还有一个悬而未决的问题可以简单地删除此功能:
https://github.com/moby/moby/issues/34565
在 Windows 上运行时,是否有其他方法可以在 Dockerfile 中使用本地安装程序,而不涉及设置服务器来提供文件?
当我运行一个全新的 git 存储库时,仅README.md使用GitLab 中的.gitlab-ci.yml标准shell执行器,整个工作需要 4 秒。当我使用 docker-windows 执行器执行相同操作时,需要 33 秒!
我的.gitlab-ci.yml:
no_git_nor_submodules:
image: base_on_python36:ltsc2019
stage: build
tags:
- docker-windows
variables:
GIT_SUBMODULE_STRATEGY: none
GIT_STRATEGY: none
script:
- echo test
no_docker_no_git_nor_submodules:
stage: build
tags:
- normal_runner
variables:
GIT_SUBMODULE_STRATEGY: none
GIT_STRATEGY: none
script:
- echo test
Run Code Online (Sandbox Code Playgroud)
我认为可能存在的一个问题是 Windows 上的 docker 镜像往往很大。我在这里测试过的是 5.8 GB。当我在服务器上手动启动容器时,它只需要几秒钟即可启动。我还使用更大的图像(36 GB)进行了测试,但使用该图像的作业也需要大约 33 秒。
由于这些作业不执行任何操作,也没有任何 git clone 或子模块,那么什么需要时间呢?
我知道 GitLab 使用一个神秘的辅助镜像来克隆 git 存储库以及其他类似的事情。难道是这张图片导致运行速度超级慢?
更新2019-11-04
我使用 . 对此进行了更多研究docker events。它显示 GitLab 总共启动了 7 …
我有一个 C++ 项目,我使用 Google Test 来编写单元测试。该项目已经存在了一段时间并且相当混乱,因此我只是在 main 函数的开头添加了一行,用于启动单元测试,然后退出程序。然后,我将注释和取消注释这一行,以便在单元测试和实际应用程序之间切换。
当只有我使用我的代码时,这工作正常,但现在我试图以正确的方式解决这个问题,使用两个项目和 .exe 文件,一个用于实际应用程序,一个用于测试,就像图萨在这里的答案: Visual Studio C++:使用 google test 进行单元测试 exe 项目?
他对此的解释如下: Linking to multiple .obj for unit test a console application
问题是所有 .obj 文件都放入该库中,包括 main 函数。这使得我无法链接到我的 testmain,因为 _main 已经定义了。我尝试在命令中添加“/REMOVE”选项,所以它看起来像这样:
lib /NOLOGO /OUT:"$(TargetPath).lib" /REMOVE:"$(ProjectDir)$(Configuration)\mainfile.obj" "$(ProjectDir)$(Configuration)\*.obj"
Run Code Online (Sandbox Code Playgroud)
我希望 mainfile.cpp 被编译为 mainfile.obj。lnk 的输出是:
LINK : warning LNK4014: cannot find member object C:\dev\solutions\currentSolution\currentProject\Debug\mainfile.obj
Run Code Online (Sandbox Code Playgroud)
我发现的关于如何编写目标文件名称的唯一信息是来自这里: http://msdn.microsoft.com/en-us/library/5ff8sk86 (v=vs.100).aspx
他们写道:
/REMOVE 和 /EXTRACT 选项需要要删除或复制到文件的成员对象的全名。全名包括原始目标文件的路径。要查看库中成员对象的全名,请使用 DUMPBIN /ARCHIVEMEMBERS 或 LIB /LIST。
如果我输入这两个中的任何一个,我会得到一个列表,其中“C:\dev\solutions\currentSolution\currentProject\Debug\mainfile.obj”是其中一个条目。
我究竟做错了什么?我是否有什么地方输入错误,或者是否有更简单的解决方案来解决这个问题?