【发布时间】:2016-02-11 18:57:25
【问题描述】:
我在部署到实时服务器的 Jenkins 服务器上管理一些 Symfony 2/3 项目。这是我目前的设置:
构建
- 使用 git 插件结帐
- 删除数据库(如果存在)
- 执行
composer install(prod 模式,优化自动加载器) - 执行
bower install以获取我的资产 - 执行
gulp构建,它缩小并连接 css / javascript(我们不使用资产) - 执行我的数据库创建工作
- 执行单元测试
归档
构建完成后,我使用“Compress Artifacts”插件将构建的工件归档,没有 vendor、node_modules 和 bower_components 文件夹作为 zip 文件。
部署
我结合使用“Promoted builds”插件和“Publish over SSH”插件:如果我想通过构建“上线”,我通过 SSH 将工件(我的 zip 文件)发布到我的实时系统在名为staging_dir 的目录中。文件上传后,我执行一些 SSH 命令:
- 将实时系统设置为维护模式
- 在我的
staging_dir中解压工件zip - 在实时系统上执行
composer install(与构建期间的配置相同) - (
bower install和gulp构建不是必需的,因为我们使用在构建期间创建的资产) - 迁移数据库
- 将当前实时系统文件移动到
backup文件夹 - 从
staging_dir复制文件 - 将实时系统设置为“生产”模式(禁用维护模式)
最佳做法?
我现在想收集一些部署的最佳实践:
- 您是否愿意将
vendor文件夹转移到实时系统而不是再次执行composer install? - 资产呢?您是在
bower install和gulp再次构建实时系统还是使用已发布的资产? - 在执行实时促销时如何处理密码?
- ...其他我忘记了。
【问题讨论】:
-
大卫,我正在为一个非常相似的设置而苦苦挣扎。您如何通过 SSH 发送由“Compress Artifacts”插件生成的 zip 文件。它存储在每个构建的根目录中,默认情况下,发布插件会在工作区目录中查找文件。如何选择自动压缩文件?
-
您能发布您的 Jenkinsfile 吗?对于刚开始学习 Jenkins 的其他人来说,这将是一个非常好的例子。