在Azure Web App/内置Azure DevOps中配置javascript设置
假设我有一个js(普通的非节点js)文件,该文件顶部包含如下设置:在Azure Web App/内置Azure DevOps中配置javascript设置,javascript,azure-devops,azure-web-app-service,Javascript,Azure Devops,Azure Web App Service,假设我有一个js(普通的非节点js)文件,该文件顶部包含如下设置: const API_ENDPOINT = 'https://somedomain-dev.azurewebsites.net/api/v1/'; 在生产环境中运行时,我需要此值: const API_ENDPOINT = 'https://somedomain-prod.azurewebsites.net/api/v1/'; 我可以想到两种方法,但不知道其中是否有一种有效,以及如何有效: 在Azure Web App=>配置
const API_ENDPOINT = 'https://somedomain-dev.azurewebsites.net/api/v1/';
在生产环境中运行时,我需要此值:
const API_ENDPOINT = 'https://somedomain-prod.azurewebsites.net/api/v1/';
我可以想到两种方法,但不知道其中是否有一种有效,以及如何有效:
实现这一点的方法是什么?我们个人使用以下方法: 然后您将标记该值:
const API_ENDPOINT = '#{API_ENDPOINT}#';
并在部署前使用AzureDevops中的任务:
#YAML文件
-任务:a8515ec8-7254-4ffd-912c-86772e2b5962@3
displayName:“替换ARM参数中的令牌”
投入:
根目录:“$(Pipeline.Workspace)/drop”
targetFiles:“**/fileToReplace.json”
编码:“自动”
writeBOM:对
基普顿肯:错
标记前缀:'#{'
标记后缀:'}#'
启用遥测:错误
actionOnMissing:“继续”
详细的
您需要将变量导入管道。有多种方法可以做到这一点,具体取决于您是使用经典管道还是YAML。例如,如果您的测试和产品环境有单独的密钥库,您可以将这些值存储在其中并使用:
#YAML文件
-任务:AzureKeyVault@1
displayName:获取KeyVault变量
投入:
azureSubscription:“${{parameters.KV_APP_NAME}”
KeyVault名称:“$(vg.KeyVault名称)”
此任务将KV中的值作为变量读取到管道中,然后您可以在部署中使用这些变量。在您的例子中,您将有一个名为Test/Dev的阶段,在那里有KV read任务,在Prod中也有相同的任务,以便使用其他值从不同的KV读取。您还可以使用Azure DevOps库或在每个阶段最常声明的经典管道环境变量中
上述两个任务也可以在经典管道中使用
总的来说,为了实现这一点,您应该以这样的方式设计部署管道:每个环境都有自己的阶段,每个环境的配置值都可以替换,如下所示:
我们个人使用这样的东西: 然后您将标记该值:
const API_ENDPOINT = '#{API_ENDPOINT}#';
并在部署前使用AzureDevops中的任务:
#YAML文件
-任务:a8515ec8-7254-4ffd-912c-86772e2b5962@3
displayName:“替换ARM参数中的令牌”
投入:
根目录:“$(Pipeline.Workspace)/drop”
targetFiles:“**/fileToReplace.json”
编码:“自动”
writeBOM:对
基普顿肯:错
标记前缀:'#{'
标记后缀:'}#'
启用遥测:错误
actionOnMissing:“继续”
详细的
您需要将变量导入管道。有多种方法可以做到这一点,具体取决于您是使用经典管道还是YAML。例如,如果您的测试和产品环境有单独的密钥库,您可以将这些值存储在其中并使用:
#YAML文件
-任务:AzureKeyVault@1
displayName:获取KeyVault变量
投入:
azureSubscription:“${{parameters.KV_APP_NAME}”
KeyVault名称:“$(vg.KeyVault名称)”
此任务将KV中的值作为变量读取到管道中,然后您可以在部署中使用这些变量。在您的例子中,您将有一个名为Test/Dev的阶段,在那里有KV read任务,在Prod中也有相同的任务,以便使用其他值从不同的KV读取。您还可以使用Azure DevOps库或在每个阶段最常声明的经典管道环境变量中
上述两个任务也可以在经典管道中使用
总的来说,为了实现这一点,您应该以这样的方式设计部署管道:每个环境都有自己的阶段,每个环境的配置值都可以替换,如下所示:
在Azure Devops中的构建/发布过程中转换文件
您可以使用来更改文件。请在生成或发布管道中添加PowerShell任务。这是我的样本:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
$filePath = 'test.js'
$tempFilePath = "test1.js"
$find = 'https://somedomain-dev.azurewebsites.net/api/v1/'
$replace = 'https://somedomain-prod.azurewebsites.net/api/v1/'
(Get-Content -Path $filePath) -replace $find, $replace | Add-Content -Path $tempFilePath
Remove-Item -Path $filePath
Move-Item -Path $tempFilePath -Destination $filePath
您还可以尝试在市场中使用扩展名,如“文件创建者”。它可以创建新文件并替换旧文件
在Azure Devops中的构建/发布过程中转换文件
您可以使用来更改文件。请在生成或发布管道中添加PowerShell任务。这是我的样本:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
$filePath = 'test.js'
$tempFilePath = "test1.js"
$find = 'https://somedomain-dev.azurewebsites.net/api/v1/'
$replace = 'https://somedomain-prod.azurewebsites.net/api/v1/'
(Get-Content -Path $filePath) -replace $find, $replace | Add-Content -Path $tempFilePath
Remove-Item -Path $filePath
Move-Item -Path $tempFilePath -Destination $filePath
您还可以尝试在市场中使用扩展名,如“文件创建者”。它可以创建新文件并替换旧文件。请检查以下几个答案是否可以解决您的问题,如果可以,您可以接受类似答案。请检查以下几个答案是否可以解决您的问题,如果可以,您可以接受类似答案。