我目前正在我们的办公室设置构建服务器,我想知道对此的最佳做法是什么。我知道每种情况都需要不同的方法,并且有一百万种方法可以实现相同的目标,但是由于我是 Jenkins 的新手,并且总体上是构建服务器的概念,所以我想知道我这样做是否正确'。
我们公司专注于为各种客户建立网站,使用各种平台,如 WordPress 或 Magento。我现在有以下设置:
我们将更改推送到 Git 中的 master 或 staging-branch。Jenkins 轮询这些分支并在检测到更改时执行以下操作:
- 从 Git 中提取存储库(
master
在本例中) - 签出一个名为的分支
build-master
- 将此分支重置为
origin/master
npm install
如果找到a则执行 apackage.json
。grunt build
如果找到a则执行 aGruntfile.js
。- (这里有其他东西的空间,比如 phpunit 或 casperJS 测试)
- 提交更改并将其推回
origin/build-master
. - 执行 a
cap build-master deploy
让 Capistrano 处理远程服务器上的部署。
现在我想知道这是否是使用构建服务器的“正确”方式。我遇到了一些逻辑问题。喜欢:
例如供应商软件。例如,当我有各种带有 Bower 的 JS 库(位于 git-ignored -js/vendor
文件夹中)时,我可以将它们连接并 uglify 成一个缩小的 JS 文件,以便它们 git 提交到build-master
-repository(用于 Capistrano)。但是当我有 PHP 库(例如使用 Composer)时,我不确定如何处理这个问题。这些位于 git-ignored -php/vendor
文件夹中,但它们需要包含在 -branch 中,build-master
以便部署在实时服务器上。目前我正在通过向.gitignore.build
我的存储库添加一个来做到这一点,其中包括- 文件夹,并在提交和推送到之前用这个php/vendor
覆盖现有的。.gitignore
origin/build-master
和/或:
编译文件。当我不想包含某些文件(例如从 SASS 生成的 CSS 文件)时,我将它们放在.gitignore
. 但同样,当 Capistrano 将要部署它时,我希望编译、连接和缩小的 CSS 文件位于我的存储库中,否则它不会放在我的生产服务器上。
谁能告诉我我是否正在以“应该”的方式构建和部署?还是我在这里完全把它复杂化了?我真的很感兴趣有更多经验的人如何在他们的构建过程中使用 Jenkins、Grunt、Bower、Composer、Capistrano 等。