<p>关于向Dockerfile传递变量,请检查我的答案<a href="https://stackoverflow.com/a/64968293/2347999">here</a></p>
<p>请在from之后添加参数</p>
<pre><code>FROM alpine
ARG serverName
RUN echo $serverName
</code></pre>
<p>然后像这样运行它</p>
<pre class="lang-yaml prettyprint-override"><code>- task: Docker@2
inputs:
containerRegistry: 'devopsmanual-acr'
command: 'build'
Dockerfile: 'stackoverflow/85-docker/DOCKERFILE'
arguments: ' build-arg a_version=$(SERVER_NAME)'
</code></pre>
<p>在从KeyVault获取值方面,您可以使用<a href="https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-key-vault?view=azure-devops#yaml-snippet" rel="nofollow noreferrer">Azure Key Vault task</a></p>
<pre class="lang-yaml prettyprint-override"><code># Azure Key Vault
# Download Azure Key Vault secrets
- task: AzureKeyVault@1
inputs:
azureSubscription:
keyVaultName:
secretsFilter: '*'
runAsPreJob: false # Azure DevOps Services only
</code></pre>
<p>请注意,此任务创建的by deault变量被标记为机密,因此它们不会映射到环境变量</p>
<p><a href="https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#secret-variables" rel="nofollow noreferrer">You can still try to use your approach but first you need to map it.</a></p>
<pre class="lang-yaml prettyprint-override"><code>- powershell: |
Write-Host "Using an input-macro works: $(mySecret)"
Write-Host "Using the env var directly does not work: $env:MYSECRET"
Write-Host "Using a global secret var mapped in the pipeline does not work either: $env:GLOBAL_MYSECRET"
Write-Host "Using a global non-secret var mapped in the pipeline works: $env:GLOBAL_MY_MAPPED_ENV_VAR"
Write-Host "Using the mapped env var for this task works and is recommended: $env:MY_MAPPED_ENV_VAR"
env:
MY_MAPPED_ENV_VAR: $(mySecret) # the recommended way to map to an env variable
</code></pre>