[小题大做] Github + Jenkins 实现自动化部署 hexo 博客静态文件

使用jenkins来部署hexo简直就是小题大做,但是偶尔这样小题大做还真有折腾的乐趣

背景

jianyujianyu.com之前是使用typecho做博客的。

原因很简单,wordpress太重,hexo很轻没错,可是这个没有后台管理(听说可以折腾成有后台管理的),每次写完博客都要deploy一下的hexo,我真心要不起。

而现在jianyujianyu.com是hexo了,经过也很简单,就是因为CA证书过期了,换证书的时候弄砸了,本着顺便过滤一波辣鸡博客的心思,重新弄,这次选择了hexo,不为什么,人生的选择就是这么奇妙。

那怎么不自己手写一个?说得好!不过我才不要。

用hexo不是不行,是要考虑deploy的事,或者,我换台电脑写博客,我没有这个hexo的node环境,我也不想登录服务器用着vim来写,比如我现在就安静在公司电脑上写博客。在这样的情况下,怎么deploy呢?在从前,wordpress和typecho有着后台管理,这个问题根本是不存在的。

想着想着,一拍脑袋,就直接用jenkins了,然后把代码放在github,包括hexo的整个文件夹。至于为啥用github而不用coding甚至是github pages,never mind。

设计的deploy过程很简单:

  • 我先clone了github上的hexo文件夹,添加了md文章,然后push
  • github整理好代码就通知jenkins:我这里资源更新了,大爷快来玩啊
  • jenkins收到消息,兽性大发地下了github上的代码
  • 拥有hexo环境的jenkins直接执行hexo g,产生了分泌物,也就是静态文件,在这里就是jianyujianyu.com的html网页内容(hexo/public)
  • 待定的nginx直接将用户请求拉向jianyujianyu.com的hexo/public文件夹即可

简单地设计完,便是动手开始。

环境准备

所有操作都是在Ubuntu的root用户下进行的,其他环境自行处理或转换

Java、Tomcat和Jenkins

jenkins是java的美好产物,为了后面调试起来简单,使用tomcat容器来装着这产物,而不是直接用apt下载。

(如果为了快捷,也可以只下载java和jenkins,然后通过java -jar jenkins.war来运行。不推荐。)

因此我们首先安装J8。

add-apt-repository ppa:webupd8team/java
apt update
apt install oracle-java8-installer

之后是安装tomcat。对应着J8,选tomcat8。先去tomcat官网下载包,然后解压。

wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.0.43/bin/apache-tomcat-8.0.43.tar.gz
tar zxvf apache-tomcat-8.0.43.tar.gz

接着是上jenkins官网下载jenkins的war包。

wget http://ftp-chi.osuosl.org/pub/jenkins/war-stable/2.46.1/jenkins.war

war包就放在tomcat文件夹的webapps下即可。

然后启动tomcat,进入tomcat文件夹的bin下,启动:

./startup.sh

接下来就可以尝试通过网页登录tomcat以及jenkins了。在浏览器中打开http://服务器的ip:8080

tomcat主页

然后打开http://服务器的ip:8080/jenkins,根据知识安装jenkins环境,安装推荐环境即可,不需要自己选择,因为推荐环境已经包含了我们需要的插件。如果要nginx反向代理tomcat,推荐先做完后面nginx的反向代理再安装jenkins

按照提示输入password,然后选择推荐安装:

正在安装,要等一下

账号密码以及权限的事自行考虑

Nodejs、NPM和hexo

hexo是nodejs的产物,因此搭建nodejs环境是必须的。而安装nodejs推荐在官网上下载源码编译,不然apt得到的都是旧的,没办法,node这两年发展得太快了。

wget https://nodejs.org/dist/v6.10.2/node-v6.10.2.tar.gz
tar zxvf node-v6.10.2.tar.gz
cd node-v6.10.2
./configure
make
make install

make可自行通过参数-j来加速编译。

安装好了node,npm也接着来了,如果在安装过程中觉得npm下载太慢可以是用淘宝镜像,使用方法自行查询。

然后照着hexo官方文档的方法安装hexo已经相关环境

npm install hexo-cli -g
hexo init hexo
cd hexo
npm install

hexo的命令很简单,有了hexo的环境之后可以通过命令生成静态文件或者启动临时服务器:

hexo g # generate static file
hexo s # start a server

在生成静态文件后,将nginx配置到hexo/public下面,请求即可到达;在启动hexo临时服务器后,即可访问http://服务器的ip:4000/jenkins。

至此,hexo环境已经是完成了。

如果说还有什么需要在这一步做的话, 那应该就是将代码push到git上,这个事我就不多说了。

Nginx

安装nginx十分简单,但是在这次的实验中,nginx地位也不算低,80或者443端口要配置到hexo/public下,最好还要给tomcat配置反向代理。在以后的安全和优化方面,nginx需要配置的也不少。

安装nginx也就一句

apt install nginx

然后便是对配置的修改(我直接改default配置文件,别的方法自行实施)

vim /etc/nginx/sites-available/default

在开放80或者443的端口的server里面配置好root,例:

root /var/www/hexo/public;

推荐给tomcat上个反向代理,

upstream tomcat  {
        server  127.0.0.1:8080;
}

server {
        listen 11111;
        listen [::]:11111;

        location / {
                #try_files $uri $uri/ =404;
                proxy_pass   http://tomcat;
                proxy_redirect  off;
                proxy_set_header Host $host:$server_port;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Request-Url $request_uri;
        }
}

以上需要注意的是proxy_set_header需要配置好,不然后面可能无法跳转到对的路径。

配置Github和Jenkins

创建job

创建job

点击create new jobs,选择freestyle,填好job名字。

选择freestyle

创建了job以后,jenkins紧接着就是让你配置jenkins,如果这次不配置也没什么,因为创建的job已经保存好了。

配置密钥

如果我在github上的代码库是私密的而不是公开的,那么jenkins想要拉取到我的代码必须要有相应的私钥。至于哪一台机上的公钥私钥没什么所谓,重要的是github上有一台机的公钥,而jenkins上应该也有这台机的私钥。当然前提是github上的代码库是私密的,公开的无所谓。

先在Jenkins添加私钥。

创建一个证书
填入git平台的公钥对应的私钥

查出private key往上填就行,为了保密我就不填真实username了。至于怎么生成key,自行查找ssh-keygen命令,或者参考类似Github的文档

配置WebHook

配置webhook是在github上完成的。webhook的存在意义就是github上发生了特定事件,然后会告诉请求jenkins,以便让jenkins去拉代码进行下一步操作。

例如,现在要配置的,就是每次将代码push上去后,就触发jenkins的操作。

打码处理。

配置job

之前的环境都搭建好了,配置刚才创建的job就是关键的一步了。

首先是要配置github project

而在源码管理里面,必须要填一个可行的、同时有权限的配置,失败则如下图,必须做到没有错误提醒

browser也顺便一填

而在Build Triggers里面必须要选Github hook trigger,勾选了jenkins才会接受github发来的请求

最后在Build,也就是构建的这部分,也填上,推荐使用shell,毕竟现在玩这些都是linux了

选择shell后,可以在文本框里面填自己部署要用到的命令,如下面的例子,cd、删除、拷贝等命令都可以。

需要注意的是,某些命令没有,这个可以通过不断的测试来检验。

至此已经配置好了jenkins上的job,接下来就是调试了。

调试

调试很简单。先把代码clone下来本地,然后稍稍改动一个无关文件,再push,之后便是感受是否这套环境是否能自动化部署。

Push代码

各种push方式任君选择

查看日志

push成功后,github hook会通知所填写的jenkins,如果jenkins没有调起job,则有可能是hook或者配置job里面的Github hook trigger没有填写正确。

如果是成功调起,在jenkins的hexo的job页面,左下角会看到有类似#1

想要查看错误日志,点击左上角的Github Hook Log或者Console Output,即可根据这些日志对配置进行调整。

Output大致都如下:

访问网站

不是红灯一般都是成功的,访问网站体验一下,jianyujianyu.com

没毛病。

若有错误之处请指出,更多地关注煎鱼

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335

推荐阅读更多精彩内容