如何在 Azure 管道中进行简单的字符串令牌替换?

How to do a simple string token replacement in Azure pipelines?

在 YAML 发布管道中,我需要对来自另一个管道的工件中包含的 js 文件进行简单替换。 这些文件具有特定的标记 (#TOKEN_URL#),必须在 Angular js 捆绑文件中替换。

该版本具有以下参数,该参数将确定要替换的值:

parameters:
- name: environment
  displayName: Environment
  type: string
  default: staging
  values:
  - staging
  - production

并且还有以下变量:

variables:
  tokenUrl: '#TOKEN_URL#'
  tokenUrlValueProd: 'https://www.xxxx.com'
  tokenUrlValueTest: 'https://www.test-xxxx.com'

tokenUrl 是在不同的 JS 和 JSON 文件中搜索的令牌。 这个想法是用 tokenUrlValueProd 或 tokenUrlValueTest 替换 '#TOKEN_URL#',具体取决于 parameters.environment 值。

我找到了用于替换的任务 ReplaceTokens@1 和 FileTransform@1,但是,在这两种情况下,我都看不到在哪里告诉令牌搜索,也看不到要放置的值而不是令牌。

有没有简单的方法可以做到这一点?

在找到方法之前,我经历了很多反复试验。 这个里的选答也帮了大忙,我得仔细看截图了。

文档对我来说不够清楚。我最终使用了 ReplaceTokens@1,它的工作方式与 FileTransform@1 非常相似,但它 显然 用于标记,而 FileTransform@1 用于 JSON 和 [=] 中的特定结构41=] 个文件。

首先,我有一个文件,其中包含一些要替换的标记:

  //Code fragment:
  urlServices: {
    urlServicesPayment: '#{tokenUrl}#/getSession',
  },

最初它类似于“#TOKEN_URL#”。然后,为了匹配 Yaml 变量名称中的 PascalCase,我更改为:'#{TokenUrl}#'.

在我的例子中,我有不同的测试值和生产值,所以我需要这样的设置:

  variables:  ##Job variables
    ${{ if eq(parameters.environment, 'production') }}:
      tokenUrl: 'https://www.xxxx.com'
    ${{ if eq(parameters.environment, 'test') }}:
      tokenUrl: 'https://www.test-xxxx.com)'

替换任务就是:

  - task: ReplaceTokens@1
    inputs:
      sourcePath: '$(Pipeline.Workspace)/dist'
      filePattern: '*.js'
      tokenRegex: '#{(\w+)}#'
  • SourcePath 是包含要转换的文件的路径
  • FilePattern 是处理一个或多个文件的通配符
  • TokenRegex 是用于查找名称与我的变量类似的标记的正则表达式模式。

在这种情况下,“#{(\w+)}#”与“#{TokenUrl}#”匹配,TokenUrl 是包含要替换的值的管道变量。 因此,'#{TokenUrl}#' 将在转换后的文件中变为 'https://www.xxxx.com'