英文:
Injection of Golang environment variables into Azure Pipeline
问题
我目前正在将一些构建组件迁移到Azure Pipelines,并尝试为所有与Golang相关的进程设置一些环境变量。我希望在流水线中执行以下命令:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build [...]
在使用提供的Golang集成时,很容易为Go相关的进程添加参数,但是似乎无法为所有(或每个单独的)Go进程设置环境变量。无论是*GoTool还是默认的Go任务似乎都不支持此功能,并且在其中执行shell命令的script*任务似乎也不受支持。
我还尝试将一个定义所需标志的环境变量添加到整个流水线进程中,但是这些变量似乎被Azure Pipelines自身提供的Go任务忽略了。
是否有办法为每个(或单个)go进程添加这些标志,就像我在以下代码块中所做的那样(其中flags输入行是我自己编写的)?
- task: Go@0
inputs:
flags: 'CGO_ENABLED=0 GOOS=linux GOARCH=amd64'
command: 'build'
arguments: '[...]'
workingDirectory: '$(System.DefaultWorkingDirectory)'
displayName: 'Build the application'
英文:
I am currently migrating some build components to Azure Pipelines and am attempting to set some environment variables for all Golang related processes. I wish to execute the following command within the pipeline:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build [...]
When utilizing the provided Golang integrations, it is easy to add arguments for Go related processes, but setting an environment variable for all (or for every individual) Go process does not seem possible. Neither GoTool or the default Go task seem to support it, and performing a script task with a shell execution in it do not seem to be supported either.
I have also tried adding an environment variable to the entire pipelines process that defines the desired flags, but these appear to be ignored by the Go task provided by Azure Pipelines itself.
Would there be a way to do add these flags to each (or a single) go process, such as how I do it in the following code block (in which the flags input line was made-up by me)?
- task: Go@0
inputs:
flags: 'CGO_ENABLED=0 GOOS=linux GOARCH=amd64'
command: 'build'
arguments: '[...]'
workingDirectory: '$(System.DefaultWorkingDirectory)'
displayName: 'Build the application'
答案1
得分: 0
根据我找到的信息和多个小时的调试,我最终采用了一种解决方法,即在CmdLine@2
任务中运行golang
命令。由于GoTool@0
设置了管道和环境,这是可能的。
因此,下面的代码片段适用于我的目的。
steps:
- task: GoTool@0
inputs:
version: '1.19.0'
- task: CmdLine@2
inputs:
script: 'CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build'
workingDirectory: '$(System.DefaultWorkingDirectory)'
英文:
Based on the information I was able to find and many hours of debugging, I ended up using a workaround in which I ran the golang
commands in a CmdLine@2
task, instead. Due to how GoTool@0
sets up the pipeline and environment, this is possible.
Thus, the code snippet below worked for my purposes.
steps:
- task: GoTool@0
inputs:
version: '1.19.0'
- task: CmdLine@2
inputs:
script: 'CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build'
workingDirectory: '$(System.DefaultWorkingDirectory)'
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论