windows - Docker for Windows 容器环境变量
问题描述
好的,这对于 Linux 容器来说似乎很容易,但我正在尝试使用 Windows 容器来完成这件事,这很烦人,因为它太难了。
我有一个构建项目的 Windows Dockerfile,构建过程的一部分是还原 C# AssemblyInfo.cs 文件,以便构建的程序集具有来自 CI 环境(Devops)的构建版本
我正在使用 Powershell 脚本https://github.com/microsoft/psi/blob/master/Build/ApplyVersionToAssemblies.ps1,它需要 2 个环境变量,我可以对其进行硬编码,所以不是问题,但是 BUILD_BUILDNUMBER 环境变量需要从 Devops 构建系统注入。
我尝试了以下方法,但没有一个有效
ARG BUILD_BUILDNUMBER
ENV BUILD_BUILDNUMBER=$BUILD_BUILDNUMBER
RUN ApplyVersionToAssemblies.ps1
并运行
docker build -f Dockerfile --build-arg BUILD_BUILDNUMBER=1.2.3.4 .
还
RUN SETX BUILD_BUILDNUMBER $BUILD_BUILDNUMBER
RUN SETX BUILD_BUILDNUMBER %BUILD_BUILDNUMBER%
还有一些我不记得的其他组合,我最终做了什么,但似乎是一个黑客,是通过 COPY 将 BUILDNUMBER 作为文件传递,然后修改 Powershell 脚本以将其读入其局部变量
所以目前它可以工作,但我真的很想知道这应该如何通过 ARG 和 ENV 为 Windows 容器构建工作
Windows Containers 绝对感觉像是 Linux 容器的可怜表弟 :)
解决方案
Docker Windows 容器中的 CMD 示例:
ARG FEED_ACCESSTOKEN
ENV VSS_NUGET_EXTERNAL_FEED_ENDPOINTS="{\"endpointCredentials\": [{\"endpoint\":\"https://URL.com/_packaging/Name/nuget/v3/index.json\", \"username\":\"PATForPackages\", \"password\":\"${FEED_ACCESSTOKEN}\"}]}"
SHELL ["cmd", "/S", "/C"]
RUN echo %VSS_NUGET_EXTERNAL_FEED_ENDPOINTS%
推荐阅读
- c++ - 如何使用 MSVC 创建静态链接的可执行文件?
- css - 如何让浏览器选择合适的 DPR
- javascript - SigmaJS dragNodes:“instanceof 的右侧不是对象”?
- java - 如何删除Java中字符串中单词之间的空格?
- c# - 从另一个表格填写一个表格不会从第二个表格中获得所有值
- sql - 没有聚合的数据透视/转置 MS SQL 2014
- java - 如何解决被跳过的 while 循环的问题?
- javascript - 如何将选择选项数据属性与输入文本区域值相乘?
- database - 如何从连接到不同网络的设备连接到 sql 数据库
- ios - 使用 swiftUI 具有过渡效果的图像轮播