环境:
我们当前的部署过程如下所示:
这种方式大多没问题,但是我们遇到了多种烦恼:
我们已经被CloudBees建议在运行促销作业之前进行代码检查,因为工作区是短暂的,并且不保证它存在或者它是最新的。但是,促销作业中的shell脚本似乎不尊重另一个JENKINS-18563中所述的环境变量,即使它们链接在textarea字段下面。所以svn checkout ${SVN_URL} -r ${SVN_REVISION}
不起作用。
我很确定这可以通过一些解决方法来解决,但我肯定必须做一些非常错误的事情。我假设许多其他人正在以类似的方式部署他们的应用程序,必须有更好的方法 - 没有各种解决方法和烦恼。
感谢您的任何指示并阅读所有内容!
答案 0 :(得分:2)
您面临的最大问题是您确实希望在促销活动中进行构建。升级的构建插件旨在执行一些小操作,主要是在构建的存档工件上,或者执行标记或其他此类操作。
设计确保它在奴隶上获得工作空间。但是(这是Jenkins的一般情况,而不是特定于CloudBees)首先,您获得的工作空间不必是用于您尝试推广的构建的工作空间。它可能是:
现在,您完全取决于Jenkins群集所承受的负载。在CloudBees上运行时,您通常最有可能遇到上述两种情况之一。
因此,您在促销活动中所采取的行动应“自给自足”。因此,例如,他们会将存档的工件复制到特定的目录中,然后使用这些复制的工件来完成他们的工作#39;或者它们将触发从提升的构建中传递参数的下游构建。或者他们将在不使用任何本地状态的情况下在远程服务器上执行某些操作(即在蓝绿色部署中翻转交换机)
在你的情况下,你正在多方面战斗。你正在争夺的第二个战线就是你在和Maven战斗。
release
配置文件生成一个版本的工件,JavaScript缩小并且可能调试信息被剥离(尽管如果可以避免它会更好)......但这是因为两个工件是等价的。 JavaScript缩小的webapp应该与未缩小的webapp一样好(除非缩小引入错误)mvn clean install -Pprod && mvn clean install -Pprod
,因为他们过去已经被裂脑工件烧毁了。这是一个糟糕设计的症状,而不是Maven的问题(除了能够创建Maven工件的特定于体系结构的构建之外会很好......但是它们可以构成自己的问题)。我怀疑破解解决方案的最安全方法是依赖复制存档的工件。
在主构建期间,创建一个文件,该文件将检出与正在构建的版本相同的修订,例如。
echo '#!/usr/bin/env sh' > checkout.sh
echo "svn revert . -R" >> checkout.sh
echo "svn update --force -r ${SVN_REVISION}" >> checkout.sh
虽然您可能想要写一些更强大的东西,例如确保您使用SVN工作副本,确保工作副本使用正确的远程URI,删除任何不需要的文件等
确保您创建的脚本已存档。
在促销过程开始时添加,将已存档的checkout.sh
复制到工作区,然后运行该脚本。您应该能够像以前一样完成所有后续的促销步骤。
更好的解决方案是为每个促销流程创建构建作业,并将SVN修订版作为构建参数传递(但需要更多工作才能为您设置(因为您已经有了促销流程)设置)
最佳解决方案是修复您的体系结构,以便生成从目标环境中发现其正确配置的工件,因此您可以将相同的工件部署到每个所需的环境,而无需重建工件。