在Azure Web App/内置Azure DevOps中配置javascript设置

在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=>配置

假设我有一个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=>配置中配置此项。这将是最好的,因为所有配置都是集中的
  • 在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库或在每个阶段最常声明的经典管道环境变量中

    上述两个任务也可以在经典管道中使用

    总的来说,为了实现这一点,您应该以这样的方式设计部署管道:每个环境都有自己的阶段,每个环境的配置值都可以替换,如下所示:


    我们个人使用这样的东西:

    然后您将标记该值:

    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
    

    您还可以尝试在市场中使用扩展名,如“文件创建者”。它可以创建新文件并替换旧文件。

    请检查以下几个答案是否可以解决您的问题,如果可以,您可以接受类似答案。请检查以下几个答案是否可以解决您的问题,如果可以,您可以接受类似答案。