【发布时间】:2013-07-29 00:56:47
【问题描述】:
环境:
- 大约十几个服务:WAR 和 JAR(使用 Tanuki 包装器运行)
- 每个服务都被部署到开发、登台和生产:环境使用不同的 web.xml 文件、Spring 配置文件(在 Tanuki 包装器上设置)...
- 我们希望将工件存储在 AWS S3 上,以便我们的 EC2 实例可以轻松获取它们:一些服务在多台机器上运行,AutoScaling 实例在启动后自动获取最新版本,开发工件应在它们完成后自动部署更新了,...
我们当前的部署过程如下所示:
- Jenkins 构建和测试我们的代码
- 一旦我们满意,我们就会使用 Artifactory plugin 发布版本(仅用于生产部署;开发和暂存工件基于普通的 Jenkins 构建)
- 我们使用Promoted Builds plugin 为每个项目(开发、登台、生产)提供 3 个不同的推广作业,为所需环境构建工件,然后将其上传到 S3
这几乎可以正常工作,但是我们遇到了多个烦恼:
- 由于无法提交到存储库,Artifactory 插件无法标记和更新源代码(这可能特定于我们的 Jenkins 提供商 CloudBees)。没关系 - 我们可以手动完成。
- Jenkins S3 plugin 不能正确处理多个上传目标(我们为每个环境使用一个) - 它会尝试上传到所有目标并在您保存配置时复制设置:JENKINS-18563。没关系 - 我们正在使用 shell 脚本进行上传,它工作正常。
- 提升作业有时会失败,因为它们可以在与原始构建不同的实例上运行 - 要么导致失败(因为文件丢失而构建),要么导致构建过时(因为正在使用旧版本)。同样,这可能由于 CloudBees 提供的特定设置而发生。这可以通过再次运行构建并希望这次升级作业在与其构建相同的实例上运行来解决(在我的理解中这纯粹是运气)。
CloudBees 建议我们在运行升级作业之前进行代码检查,因为工作区是短暂的,不能保证它存在或保持最新状态。但是,升级作业中的 shell 脚本似乎不遵守另一个 StackOverflow thread 中所述的环境变量,即使它们链接在 textarea 字段下方。所以svn checkout ${SVN_URL} -r ${SVN_REVISION} 不起作用。
我很确定这可以通过一些解决方法来解决,但我肯定做错了什么。我认为许多其他人正在以类似的方式部署他们的应用程序,并且必须有更好的方法 - 没有各种解决方法和烦恼。
感谢您的任何指点并阅读所有内容!
【问题讨论】:
-
您能否详细说明为什么您的 Artifactory 无法提交源代码控制?
-
看起来提交和标记毕竟很好,只是缺少对最新快照的更新。我创建了一个单独的问题,因为这只是一个小问题,而不是原始问题的核心:stackoverflow.com/questions/17921881/…
标签: java deployment amazon-s3 jenkins