用Docker简化Nodejs开发3——用webhook实现自动
利用GitHub的webhook和Jenkins实现提交代码后,生产环境(阿里云主机)自动拉取代码进行部署。
安装Jenkins
首先在云主机上完成Docker的安装,可参考官网文档。
执行命令安装Jenkins
docker run -u root --rm --name jenkins-blueocean -d -p 8080:8080 -p 50000:50000 -v /data/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
- 基础镜像使用的是官网推荐的
jenkinsci/blueocean
; - 映射8080端口,访问jenkins的界面;
- 映射Jenkins的home目录到主机目录,
/data/jenkins_home:/var/jenkins_home
。jenkins运行数据都会放在这个目录里(后面会用到); - 映射JNLP端口50000到主机端口,设置就行了,目前没有用。
参考:https://jenkins.io/zh/doc/book/installing/
打开Jenkins
Docker容器运行后,访问主机地址http://host:8080
,出现如下页面:

在主机上运行命令进入容器:
docker exec -it jenkins-blueocean bash
在容器内执行命令查看文件:
cat /var/jenkins_home/secrets/initialAdminPassword
将输出的字符串复制前面的页面中。
通过后出现下面的页面:

选择跳过插件安装
就可以。
设置Jenkins
打开Jenkins,执行New Item
:

输入项目名称,选择Freestyle project
。注意:在/var/jenkins_home
目录下会创建workspace/项目名称
目录,它将作为github上拉取代码的根目录。

选择Configure
,设置与github相关的参数。

勾上GitHub
项目,填写项目在GitHub上的URL。

在源代码管理部分,勾上Git
,填写仓库的URL(.git结尾)。

如果项目比较大,需要拉取很长时间(超过10分钟),需要指定超时参数。

构建触发器中勾选GitHub hook trigger for GiTScm polling
,如下图:

指定构建完成后执行的shell脚本。

设置github
进入到github上的项目页,选择Settings
标签,选择Webhooks
,如下图:

添加webhook
,设置接收事件的地址和事件类型(只接收push事件)。

运行
设置好之后,每次向GitHub提交代码都会出触发Jenkins拉取代码。
在Build History
中可以查看任务执行的情况。

选择一条记录可以进入查看详情,Console Output
中包括输入的内容。

总结
通过GitHub的webhook机制可以实现多个环境间实现联动,通过Jenkins可以实现构建过程的可视化,它们减少了运维人员大量的重复工作,既减少了工作量也避免发生认为错误。