Home » Code » Linux » Jenkins持续集成

Jenkins持续集成

首先需要理解概念,持续集成(continuous integration)指的是,频繁地(一天多次)将代码集成到主干。与之相关的还有两个概念:持续交付(continuous delivery)与持续部署(continuous deployment)。详细可参考这篇文章

下载启动Jenkins非常简单,准备好Java环境后直接运行就可以了,诸如这样:nohup java -jar jenkins.war &。详细可查看官网文档。启动后就可以通过http://yourip:8080进行访问(默认使用8080端口),初始账号admin,密码在安装目录(默认:<home folder>/.jenkins)下的secrets/initialAdminPassword文件中。

登录后新建任务->构建一个自由风格的软件项目,源码管理使用git,埴写项目的仓库地址即可(记得在Jenkins所在服务器生成ssh登录密钥并添加到git仓库账号中,否则无法访问git仓库源码)。构建触发器可以是定时拉取,在Poll SCM项目填写,但最好还是使用webhook,在有推送的时候通知构建。我的项目是在开源中国的码云上,有webhook插件可以安装(见此),其他一些代码托管网站一般也有提供。

构建操作我的比较简单,直接同步代码到网站目录而已,而且还是跟Jenkins同台机器。这是一个Laravel项目,需要排除一些目录与文件。一个注意点,exclude后边其实是一个正则,只要路径匹配了这个正则就会被忽略,因此有需要被包含的要先写,再写忽略的,即先写include,再写exclude.

构建后的操作,进行存档,并进行邮件通知。注意这个是失败才通知,我想要每次都通知,暂时不知道怎么搞,难道要写脚本?存档我是把全部文件进行存档,需要写**,只写一个*只会存档工作目录下的文件,不包含子目录及子目录下的文件。存档文件保存在jobs/{$PROJECT_NAME}/builds/{$BUILD_VERSION}/archive。

至此,当往远程仓库push代码时,就会触发构建,下载最新的代码,并同步到网站目录,最后进行存档。

如果想要进行回滚到某个构建需要怎么做?等搞好了再来更新!

PS: 偶尔出现 nohup.out 日志巨大的问题,好像跟 dns 有关(参考),依据参考文章的评论,尝试使用以下命令启动试试:nohup java -Dhudson.DNSMultiCast.disabled=true -jar jenkins.war &

2018-10-29更新

当 jenkins 服务器与部署服务器不同一台时,jenkins 服务器需要访问部署服务器把代码传输过去,要实现无密钥登录,就得把 jenkins 服务器的公钥复制到部署机器的 authorized_keys 文件中,可以使用命令完成:ssh-copy-id -i .ssh/id_rsa.pub username@target_host_ip。这样 jenkins 服务器就可以不使用密码登录部署机器来传输代码了。

关于代码依赖安装的问题,是在 jenkins 服务器安装完后再将 vendor 目录一并传输还是在部署服务器安装,曾经纠结过,其实答案很明显:应该在 jenkins 服务器把全部依赖安装完毕后把全部的完整的可运行的最终版传递过去。原因是:部署服务器成千上万,多台安装消耗过多带宽与资源,而且其中一台因网络不好安装失败的话,那一台服务器就挂了,内网传输速度很快,而且传输过去的就应该是最终的完整版,可随意复制即刻运行的版本。

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Time limit is exhausted. Please reload CAPTCHA.