我们目前正在建立一个Jenkins共享库,用于几个Java项目。我们的文件vars/utils.groovy
包含以下(简化的(片段:
def mvn(String mvnCommand) {
// withCredentials(userVarEtc=USER, pwVarEtc=PASS, etc, etc) {
sh "mvn ${mvnCommand} -Duser${USER} -Dpass${PASS} --settings maven_settings.xml"
// }
}
尽管上面的代码段运行良好,但它要求所有Java项目在项目的根目录中保持完全相同的maven_settings.xml
模板文件。为了防止重复,我们希望在共享库中添加maven_settings.xml
文件,并在上面的groovy方法中引用其共享库路径。有人知道怎么做吗?
我能想到两种可能的解决方案。
解决方案1
-
将文件
maven_settings.xml
保存在resources
目录中。shared-library-repository +--resources/maven_settings.xml +--vars/utils.groovy
-
在共享库方法中,在调用maven命令之前,先读取此文件并写入工作区。
def mvn(String mvnCommand) { def myMavenSettings = libraryResource 'maven_settings.xml' writeFile file: 'maven_settings.xml', text: myMavenSettings withCredentials(userVarEtc=USER, pwVarEtc=PASS, etc, etc) { sh "mvn ${mvnCommand} -Duser${USER} -Dpass${PASS} --settings $WORKSPACE/maven_settings.xml" } }
溶液2
-
安装配置文件提供程序插件。
-
转到管理Jenkins>托管文件>添加新配置。
-
单击Maven settings.xml,然后单击Submit。
-
键入名称并将内容粘贴到指定的字段中。
-
重命名或复制文件ID,然后单击保存。
-
在共享库方法中,调用插件步骤来运行maven命令。
def mvn(String mvnCommand) { configFileProvider([configFile(fileId: '<file_ID>', variable: 'MAVEN_SETTINGS')]) { withCredentials(userVarEtc=USER, pwVarEtc=PASS, etc, etc) { sh "mvn ${mvnCommand} -Duser${USER} -Dpass${PASS} --settings $MAVEN_SETTINGS" } } }