用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简化Nodejs开发3——用webhook实现自动更新_第1张图片
image.png

在主机上运行命令进入容器:

docker exec -it jenkins-blueocean bash

在容器内执行命令查看文件:

cat /var/jenkins_home/secrets/initialAdminPassword

将输出的字符串复制前面的页面中。

通过后出现下面的页面:

用Docker简化Nodejs开发3——用webhook实现自动更新_第2张图片
image.png

选择跳过插件安装就可以。

设置Jenkins

打开Jenkins,执行New Item

用Docker简化Nodejs开发3——用webhook实现自动更新_第3张图片
image.png

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

用Docker简化Nodejs开发3——用webhook实现自动更新_第4张图片
image.png

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

用Docker简化Nodejs开发3——用webhook实现自动更新_第5张图片
image.png

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

用Docker简化Nodejs开发3——用webhook实现自动更新_第6张图片
image.png

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

用Docker简化Nodejs开发3——用webhook实现自动更新_第7张图片
image.png

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

用Docker简化Nodejs开发3——用webhook实现自动更新_第8张图片
image.png

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

用Docker简化Nodejs开发3——用webhook实现自动更新_第9张图片
image.png

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

用Docker简化Nodejs开发3——用webhook实现自动更新_第10张图片
image.png

设置github

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

用Docker简化Nodejs开发3——用webhook实现自动更新_第11张图片
image.png

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

用Docker简化Nodejs开发3——用webhook实现自动更新_第12张图片
image.png

运行

设置好之后,每次向GitHub提交代码都会出触发Jenkins拉取代码。

Build History中可以查看任务执行的情况。

用Docker简化Nodejs开发3——用webhook实现自动更新_第13张图片
image.png

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

用Docker简化Nodejs开发3——用webhook实现自动更新_第14张图片
image.png

总结

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

你可能感兴趣的:(用Docker简化Nodejs开发3——用webhook实现自动更新)