[英]Jenkins pipeline : templating a file with variables
我有一個處理模板文件(例如XML文件)的管道作業,需要在使用渲染文件之前用作業參數替換文件中的一些變量,但我現在似乎無法找到任何干凈的東西,現在我只是使用shell腳本和sed逐個替換每個變量。
這是一個示例XML模板文件:
<?xml version='1.0' encoding='UTF-8'?>
<rootNode>
<properties>
<property1>${property1}</property1>
<property2>${property2}</property2>
<property3>${property3}</property3>
</properties>
</rootNode>
我希望我的模板文件中的“變量”替換為我的作業參數$property1
, $property2
和$property3
。 這就是我今天要做的事情:
sh "sed -i 's/@property1@/${property1}/' '${templateFile}'" +
"sed -i 's/@property2@/${property2}/' '${templateFile}'" +
"sed -i 's/@property3@/${property3}/' '${templateFile}'"
...但我覺得它很難看......詹金斯有什么東西用來模板文件,例如Jinja2 (或任何模板框架)會做什么嗎?
這是我找到的解決方案:我使用以下文件創建了一個全局共享庫:
resources/report.txt.groovy
(這是我的模板文件):
Hello from ${job}!
vars/helpers.groovy
:
import groovy.text.StreamingTemplateEngine
def renderTemplate(input, variables) {
def engine = new StreamingTemplateEngine()
return engine.createTemplate(input).make(variables).toString()
}
然后,在我的管道中,我添加了以下步驟:
variables = [ "job": currentBuild.rawBuild.getFullDisplayName() ]
template = libraryResource('report.txt.groovy')
output = helpers.renderTemplate(template, variables)
這將生成存儲在output
變量中的字符串,其中包含以下內容:
Hello from SIS Unix Automation Testing » myjob » master #29!
其中SIS Unix Automation Testing » myjob » master
是我的Multibranch Pipeline作業的全名。
當然,您可以使用此變量的內容執行任何操作,例如將其寫入文件或通過電子郵件發送,您可以使用xml文件模板或任何所需的文件類型,而不僅僅是txt。
請注意,您需要禁用沙箱或批准/白名單腳本才能使用此方法,否則將阻止StreamingTemplateEngine
某些內部功能。
流模板引擎的模板格式如下: ${variable}
或$VARIABLE
形式的任何內容都將直接替換, <% %>
/ <%= %>
語法可用於嵌入scriptlet(例如循環或if語句)(類似於ERB模板)。 StreamingTemplateEngine
的文檔可在此處獲得 。
如果您只需要XML文件的東西,那么Jenkins的config-file-provider插件可以正常工作但是對於我的用途它是有限的。 它為模板文件提供了一個集中位置(或者您可以指向文件系統中的文件)並可選擇替換令牌。 然而問題是令牌選項針對所有或沒有令牌(並且硬編碼以尋找$ {VAR}或$ VAR格式的令牌)。 因此,如果您的所有令牌都可以在jenkins環境中使用,那么您會沒事的,但如果您有自定義的東西,那么它將導致失敗。 例如:
This is my instruction file. This file is saved to ${BUILD_URL}/file.txt
如果我想生成一個bash腳本,上面的代碼將會工作....
VAR = ${BUILD_URL}
echo $VAR
這將失敗,因為它無法找到$ VAR的值。 逃避$並沒有幫助所以我不知道該怎么做我的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.