尝试理解这个CI的内容,以便我在生产服务器中下载Jenkins ...
1。 Jenkins(或任何其他CI系统)是否已安装在生产服务器中,或者我应该为Jenkins构建提供单独的服务器? 如果Jenkins在另一台服务器上,我如何将构建集成为我正在运行的生产代码?或者这个CI事件与部署无关?
然后我在/var/lib/jenkins/.ssh创建了一个SSH密钥,添加到我的Bitbucket(Git)存储库作为部署密钥......
2。这是正确的方法吗?
...并在项目设置的Git插件中使用git@bitbucket.org:...
用户凭据设置存储库URL jenkins
。
到目前为止,我的构建检查了Jenkins工作区的项目,然后我注意到它运行的每个构建都是一个结帐,对于每个结帐,作为Composer支持的项目,我的vendors/
目录不是'那里,所以我没有autoload.php
文件phpunit.xml
用作引导来加载类并运行测试。因此,除了phpunit
作为构建shell命令之一,我添加了composer init
。
第3。这是正确的吗?我应该在每次构建时运行composer init
吗?
主要问题可能是:我的构建是否是从绿地空间构建的?我应该签出并运行composer install
以及我的项目每次(每次构建)必须运行的脚本吗?
谢谢!
答案 0 :(得分:0)
- Jenkins(或任何其他CI系统)是否安装在生产服务器中,或者我应该为Jenkins构建提供单独的服务器?如果Jenkins在另一台服务器上,我如何将构建集成为我正在运行的生产代码?或者这个CI事件与部署无关?
醇>然后我在/var/lib/jenkins/.ssh创建了一个SSH密钥,添加到我的Bitbucket>(Git)存储库作为部署密钥......
- 这是正确的方法吗?
醇>
这是对的。我有一堆这样配置的服务器。在不久的将来,我想调查是否可以使用SSH Credentials Plugin在那里存储我的凭据,这样我就不必关心该密钥的文件系统权限。
- 这是对的吗?我应该在每次构建时运行composer init吗?
醇>主要问题可能是:我的构建是否是从绿地空间构建的?我应该签出并运行作曲家安装以及我的项目每次必须运行的任何脚本(每次构建)吗?
这取决于您的要求。您可以拥有多个构建,或者构建参数化以支持不同的行为。例如,我有Laravel构建,根据环境参数,他们可能会使用Selenium进行进一步测试,或者只是运行phpunit。
我通常在Jenkins中为每个PHP应用程序提供两个项目。一个从git中检出代码,清理工作区中其他构建的剩余部分,并调用Laravel的Envoy来构建项目。它基本上做的是使用一些额外的参数调用composer install
,并调用迁移和数据库种子例程来准备应用程序以进行测试。
当我推广(使用Jenkins Promoted Builds Plugin)构建时,触发另一个作业,并且它复制(使用Copy Artifacts Plugin)在构建期间创建并已经过测试的工作区,并通过scp将其部署到文件夹在QA服务器中。然后它会更新一些符号链接,最后它就可以测试了。
随着开发人员和其他团队的时间和更多要求,您将熟悉许多其他插件,例如Email-ext Plug-in,以发送自定义通知并包含有关构建的更多信息。
答案 1 :(得分:0)
最佳实践会为Jenkins指定一个单独的VM,只是为了使它与可能部署到的其他环境区别开来。
Jenkins可以使用脚本删除其他服务,因此删除正在部署项目的运行Jenkins的同一个tomcat将会......不方便。
我陷入了有利于连在一起的多个Jenkins工作的阵营。一项工作建立。另一个测试。第三部署。这样你就可以准确地知道哪个工作有问题了。您还可以查看作业运行时间并更好地了解需要花费多长时间(是部署?是单元测试吗?)并从更高的POV中解决问题。
我在2015年的Boise Code Camp中提供了Jenkins Best Practices演示文稿: http://lanyrd.com/2015/boise-code-camp/sdkggb/