让我的maven package-deploy项目写入WAR文件中的属性文件的最佳方法是什么?
我目前有三个独立的maven项目,可以创建自己的包:
a.war , b.zip 和 c.tar.gz
在WAR文件(a.war)内部,有一个包含以下内容的属性文件:
buildDate=2018-01-25 16:11:49 PST
aUiNumber=2.1.0-SNAPSHOT.5
buildNumber=2.1.0-SNAPSHOT.${deploy.number}
文件位于此处(WAR文件内):
WEB-INF/classes/a-version.properties
在Jenkins服务器上,我有一个使用maven执行以下操作的作业:
我想让这个maven作业使用Jenkins作业号填充a-version.properties文件中的${deploy.number}
。对此最好的方法是什么?有没有办法在不解压WAR文件的情况下执行此操作?
我尝试将a.war/WEB-INF/classes
添加到war文件的<directory>
部分。正如预期的那样,构建没有失败;但是,它也没有填充变量:
mvn -U -f ./PackageDeployPom.xml resources:resources -Ddeploy.number=${BUILD_NUMBER}
[INFO] skip non existing resourceDirectory /home/jenkins/app-assets/apache-tomcat-8.0.41/webapps/a.war/WEB-INF/classes
答案 0 :(得分:0)
不确定这是否是执行此操作的最佳方式,但以下是我的方法:
我使用了exec-maven-plugin
。
maven项目现在遵循以下程序:
使用exec-maven-plugin调用bash脚本。这个脚本将:
我。将a.war文件复制到临时工作空间目录,在此处解压缩。
II。填充temp-workspace / WEB-INF / classes / a-version.properties中的变量。 (使用sed)。
III。使用jar更新war文件中的文件。
打包app-assets.zip
部署app-assets.zip
以下是我为打包作业添加到pom文件中的内容:
<plugin>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<groupId>org.codehaus.mojo</groupId>
<executions>
<execution><!-- For Adding deploy Number -->
<id>Renaming build artifacts</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>bash</executable>
<commandlineArgs>scripts/BuildNumber.sh -b ${deploy.number}</commandlineArgs>
</configuration>
</execution>
</executions>
</plugin>
以下是由maven插件执行的Bash脚本的工作部分:
#Cleaning the TempWorkspace
TempWs=${Workspace}/a-war-temp;
if [[ ! -d ${TempWs} ]];then
mkdir ${TempWs};
else
rm -r ${TempWs}/;
mkdir ${TempWs};
fi
#--- end cleaning temp workspace ---
#Copying the war file to the temp workspace
cp ${Workspace}/app-assets/${ApacheTomcat}/webapps/a.war ${TempWs}/a-old.war;
#Unpacking the war file, using sed to make changes to variable(s)
cd ${TempWs}
jar xvf aw-old.war;
sed -i "s/\${deploy.number}/${BuildNumber}/g" ${TempWs}/WEB-INF/classes/am-version.properties
cd ${Workspace}; #Going back to the Workspace
#--- end populating variable(s) ---
#Updating the war file with the new properties file
jar -uf ${Workspace}/aw-emr/${ApacheTomcat}/webapps/aw.war -C ${TempWs} WEB-INF/classes/am-version.properties
使用此命令运行Maven:
mvn -U -B -Ddeploy.number=${BUILD_NUMBER} -f ./App-Asset-deploy.xml clean package