gitlab 8.12.7 + jenkins 2.23
gitlab服务器
安装gitlab,可从镜像将安装文件下载。 下载安装后,在配置文件中修改host值,否则项目host为机器的名称,无法访问。 默认路径:
/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
将HOST改为ip或者配置的域名。 然后重启gitlab服务
gitlab-clt restart
jenkins服务器
1.jenkins 机器秘钥
而首先需要在jenkins本地生成秘钥对,使用命令
ssh-keygen -t rsa -C "[email protected]"
会生成三个文件:
id_rsa 私钥 id_rsa.pub 公钥 known_hosts
接下来按三下回车,生成无密码秘钥,默认是生成在/home/<username>/.ssh/
目录下,其中id_rsa
为私钥
,id_rsa.pub
为公钥
,本地有私钥,将公钥设置在项目中后,即可通过ssh方式将项目clone下来,而无需输入密码。
需要将代码从gitlab拉取下来,通过ssh方式,需要将jenkins的公钥(id_rsa.pub中的内容)添加到gitlab项目设置(项目页面右上角的)中的Deploy Keys
2.jenkins插件
在jenkins的 系统管理 -> 插件管理 -> 可选插件 中可选择安装的插件。
git plugin 使用git拉取代码等操作 gitlab plugin 可以在gitlab push和merge代码时调用jenkins的webhook,从而触发jenkins任务执行。 ssh plugin ssh方式远程连接到机器执行脚本 publish HTML plugin 用户发布我们覆盖率测试之后生成的html覆盖率信息 AnsiColor 使控制台输出带颜色
3.gitlab connection
连接到gitlab拉取代码使用,配置证书,使用gitlab api token,token可以从gitlab中获取,在个人设置中有Access Token一栏,创建以个token,填入jenkins的设置即可。
4.创建构建任务
a. 主页点击 新建 b. 输入任务名称(建议与项目名一致或者和项目相关,易于辨识)并选择 构建一个自由风格的软件。 c. General 配置,需要选择 gitlab connection,这个连接在 系统管理 -> 系统设置 -> gitlab配置中添加。 d. 源码管理,需要安装git插件,选择git方式,填写 项目地址以及证书信息。 e. 构建触发器配置,由于我们使任务由webhook 事件来通知,所以在安装gitlab插件后会有选择gitlab 的事件来触发,选项中会有webhook调用的地址,将此地址在gitlab 对应项目webhook配置中添加即可。 f. 构建环境配置,如果需要每次构建前先删除工作空间的项目,勾选选项。安装ssh插件后,可以选择在构建前和构建后的脚本,我们在这里配置,单元测试后,远程连接到应用服务器部署的脚本。 g. 构建配置,这一步执行单元测试,选择Excute Shell,填写我们需要执行的测试脚本。 h. 构建后配置,选择构建后向gitlab推送状态,并选择publish HTML,这个是将node.js进行覆盖率测试后的结果html文件发布出来。
应用服务器
jenkins生成的公钥(默认命名为id_rsa.pub)放在目标机器B的/home/<username>/.ssh/
下,命名为authorized_keys
,这样在jenkins机器ssh远程连接到目标机器执行脚本时就不需要密码了。
安装node.js运行时环境。
自动化部署流程
(这个最重要的图差点忘了,已补上)
1.push代码到gitlab
push代码、创建合并请求、merge代码
2.gitlab通过webhook推送事件到jenkins,触发构建任务
webhook需要在jenkins创建的任务中触发构建的配置中获取webhook的地址,然后设置到gitlab项目中的webhook中,jenkins需要安装gitlab插件。
3.jenkins从gitlab将最新代码拉取下来
这个步骤需要在gitlab的项目设置Deploy Keys,中将执行jenkins程序的用户生成的公钥(id_rsa.pub)中的内容添加到gitlab作为一个Deploy Key。 由于jenkins服务是由root用户启动,而拉取代码默认是jenkins用户执行,所以,我们需要在证书中粘贴jenkins用户的私钥。
4.对代码进行单元测试
这个步骤目前通过shell执行,因此需要安装运行时环境、数据库(如果使用本地连接)等。
5.测试通过后对代码进行build(如需要)
对测试后的代码进一步的构建成生产环境需要使用的形式,或者跳过。
6.jenkins通过ssh登录到应用服务器上,将最新的代码部署到应用服务器
此步骤需要在应用服务器上放jenkins的公钥并命名为authorized_keys,在.ssh目录中。 远程连接到应用服务器上执行脚本,进行代码更新和重新部署。
7.推送构建状态到gitlab
此步骤也使用到了gitlab plugin的功能。
最后
其实这也只是分享了一种方案,并不是说只有这样才是最好的,可自行选择:)
支持一下