【问题标题】:Are my Jenkins builds checkouts from my SCM?我的 Jenkins 是否从我的 SCM 构建结帐?
【发布时间】:2015-04-30 02:32:19
【问题描述】:

试图理解 CI 这个东西,所以我在我的生产服务器中下载了 Jenkins...

1. Jenkins(或任何其他 CI 系统)是否安装在生产服务器中,或者我应该为 Jenkins 构建单独的服务器? 如果 Jenkins 在另一台服务器中,我如何将构建集成为我正在运行的生产代码?或者这个 CI 的东西与部署无关?

然后我在 /var/lib/jenkins/.ssh 创建了一个 SSH 密钥作为部署密钥添加到我的 Bitbucket (Git) 存储库中...

2。这是正确的方法吗?

...并在项目设置的 Git 插件中使用 jenkins 用户凭据设置存储库 URL git@bitbucket.org:...。 到目前为止一切顺利,我的构建将项目签出到 Jenkins 工作区,然后我注意到它运行的每个构建都是一个签出,并且对于每个签出,作为一个 Composer 供电项目,我的 vendors/ 目录不存在,所以我没有phpunit.xml 用作引导程序来加载类和运行测试的autoload.php 文件。因此,除了 phpunit 作为构建 shell 命令之一之外,我还添加了 composer init

3.这是正确的吗?我应该在每次构建时运行composer init 吗?

主要问题可能是:我的建筑是由新建空间建造的吗?我是否应该检查并运行composer install 以及我的项目每次必须运行的任何脚本(每次构建)?

谢谢!

【问题讨论】:

    标签: php git jenkins continuous-integration composer-php


    【解决方案1】:
    1. Jenkins(或任何其他 CI 系统)是否安装在生产服务器中,或者我应该为 Jenkins 构建单独的服务器?如果 Jenkins 在另一台服务器中,我如何将构建集成为我正在运行的生产代码?或者这个 CI 的东西与部署无关?

    然后我在 /var/lib/jenkins/.ssh 创建了一个 SSH 密钥作为部署密钥添加到我的 Bitbucket >(Git) 存储库...

    1. 这是正确的方法吗?

    没错。我有一堆这样配置的服务器。在不久的将来,我想调查是否可以使用 SSH Credentials Plugin 将我的凭据存储在那里,这样我就不必注意该密钥的文件系统权限。

    1. 是这样吗?我应该在每次构建时运行 composer init 吗?

    主要问题可能是:我的建筑是从新建空间建造的吗?我是否应该检查并运行 composer install 以及我的项目每次(每次构建)都必须运行的任何脚本?

    这取决于您的要求。您可以有多个构建,或者对您构建的参数进行参数化以支持不同的行为。例如,我有 Laravel 构建,根据环境参数,他们可能会使用 Selenium 进行进一步测试,或者只是运行 phpunit。

    我通常在 Jenkins 中为每个 PHP 应用程序创建两个项目。从 git 中检查代码,清理工作区中其他构建的任何剩余部分,并调用 Laravel 的 Envoy 来构建项目。它的基本作用是使用一些额外的参数调用composer install,并调用迁移和数据库种子例程来准备应用程序进行测试。

    当我提升(使用 Jenkins Promoted Builds Plugin)构建时会触发另一个作业,它会复制(使用 Copy Artifacts Plugin)在构建期间创建并已测试的工作区,并通过 scp 将其部署到质量检查服务器。然后它会更新一些符号链接,最后它可以测试了。

    随着时间的推移以及来自开发人员和其他团队的更多要求,您将熟悉许多其他插件,例如 Email-ext Plug-in,用于发送自定义通知并包含有关构建的更多信息。

    【讨论】:

    • 好的,所以我的构建没有规则,对吧?如果告诉 Jenkins 构建只是一个 git pull 而不是 git checkout,那没有问题吗?最好有单独的测试和部署工作?这就是为什么每个 PHP 项目都有两个 Jenkins 项目的原因?
    • > 生产服务器中是否安装了 Jenkins(或任何其他 CI 系统),或者我应该为 Jenkins 构建单独的服务器? 你应该肯定 为 CI 使用单独的服务器,而不是实际的生产服务器!
    • Leo,您可能希望使用 Git 插件并对其进行配置以尝试合并更改,或者始终克隆一个干净的存储库。至于一项或多项工作,我发现以这种方式创建和管理构建管道更容易,但您和您的团队可以选择更适合您的场景的工作。
    【解决方案2】:

    最佳实践会为 Jenkins 规定一个单独的 VM,只是为了使其与可能部署到的其他环境分开。

    Jenkins 可以使用脚本关闭其他服务,因此关闭运行 Jenkins 的同一个 tomcat 来部署项目会......不方便。

    我属于喜欢将多个 Jenkins 工作链接在一起的阵营。一项工作建立。另一个测试。第三个部署。这样你就可以确切地知道哪个工作有问题。您还可以查看作业运行时间并更好地了解花费了这么长时间(是部署吗?是单元测试吗?)并从更高的 POV 解决问题。

    我在 2015 年博伊西代码训练营上发表的 Jenkins 最佳实践演示文稿可在此处获得: http://lanyrd.com/2015/boise-code-camp/sdkggb/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多