如何在 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'
在 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'