我提出了一个解决方案,将问题和答案(都来自Anh)结合起来。 Anh的解决方案存在问题,即我们必须包含可能包含凭据的settings.xml文件(在我的情况下,它包含一些机密信息),这不应该是存储库的一部分(正如sigi在评论中指出的那样)。
以下是我避免风险的步骤:
clean install -s settings.xml
请注意,我在Jenkins中创建的构建项目是一个Maven项目。
我刚找到了一种解决方法,通过在我的文件夹中直接添加mvn-settings.xml
并编辑运行命令:
mvn clean install -s mvn-settings.xml
我也在提供配置文件中添加了我的maven settings.xml
等等...你根本不需要这样做: 任何maven命令都会在$HOME/.m2/settings.xml
文件夹中查找settings.xml文件: 你只需要确保运行Jenkins从机(实际执行任务的地方)的用户在该文件夹中拥有该文件。
然后确保用户可以在本地maven项目上使用 mvn clean install
命令。一旦这个已经工作了,你就可以尝试你的Jenkins构建。
还有一种方法:
@Anh N. Nguyen
的解答的扩展,但要注意不要将机密信息存储在源代码控制中。@Harikrishnan
更简单,步骤更少,并且不需要任何额外的插件 (config-file-provider)。步骤:
mvn-settings.xml
以从环境变量中读取机密信息。<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>nexus</id>
<username>${env.NEXUS_USER}</username>
<password>${env.NEXUS_PASSWORD}</password>
</server>
</servers>
</settings>
pipeline {
agent {...}
environment {
NEXUS_CREDS = credentials('NexusArtifactoryLogin')
NEXUS_USER = "$NEXUS_CREDS_USR"
NEXUS_PASSWORD = "$NEXUS_CREDS_PSW"
}
stages {
...
stage('Build') {
steps {
\\assuming mvn-settings.xml is at root/current folder, otherwise provide absolute or relative path
sh 'mvn -s mvn-settings.xml clean install'
}
}
...
}
}
这里描述了一个过程here。对于Maven构建作业,
当您触发构建时,Jenkins将会把带有您凭据的元素注入到临时设置文件中。
使用mvn -X命令运行您的作业。在日志中,您将找到Jenkins从哪里获取setting.xml文件。
在我的情况下,我将设置文件放在/.m2/中,但在检查日志时发现它位于以下位置:/var/lib/jenkins/.m2
[INFO] Error stacktraces are turned on.
[DEBUG] Reading global settings from /usr/share/maven/conf/settings.xml
[DEBUG] Reading user settings from /var/lib/jenkins/.m2/settings.xml
[DEBUG] Using local repository at /var/lib/jenkins/.m2/repository