docker持续集成-drone发布静态博客
将hugo产生的静态页面推送到github
并通知到钉钉群
目标
自动化发布github pages
原流程:
通过hugo生成github pages
将public文件夹中的文件拷贝到xxx.github.io项目
更新该项目到github上
自动化流程:
当确认新文章可以更新到博客上时
将该文章提交到私有仓库src-repo
触发drone任务
drone会拉取新文章 通过hugo生成public文件夹
拷贝到xxx.github.io项目中 并提交推送
最后发通知到钉钉群
drone服务搭建
drone-server 用来管理任务,将任务调度给runner
runner则负责执行构建任务
之前本文依据1.0版本的drone写的
现在根据1.6版本的drone调整
前置配置项
一个github账户
访问 https://github.com/settings/tokens
可看到两个选项卡 oauth apps、Personal access tokens
通过该账户创建一个oauth的clientId secret 以及 accessToken
clientId 用来给drone-server做企业账户
accessToken 则是作为commit push仓库时,登录用
drone-server绑定github
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#github中创建的oauth信息
DRONE_GITHUB_CLIENT_ID=c48b2xxxx7b6ed
DRONE_GITHUB_CLIENT_SECRET=e8exxxxef9c7deb2
#drone集群内部的共享密钥
DRONE_RPC_SECRET=9847fbbe1bf5f1556cf12adbef1153b8
#对外提供访问域名 与端口
DRONE_SERVER_HOST=tom.kongzi.com:12321
DRONE_SERVER_PROTO=http
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_AGENTS_ENABLED=true \
--env=DRONE_GITHUB_SERVER=https://github.com \
--env=DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_ID} \
--env=DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET} \
--env=DRONE_RPC_SECRET=${DRONE_RPC_SECRET} \
--env=DRONE_SERVER_HOST=${DRONE_SERVER_HOST} \
--env=DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO} \
--publish=80:80 \
--publish=443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:1.6
#在 https://github.com/settings/developers 可创建Client ID, Client Secret
#在路由器上配置端口转发 将请求到的12321端口的数据转发drone所在主机的80端口
|
runner
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
DRONE_RPC_SECRET=9847fbbe1bf5f1556cf12adbef1153b8
#这里写的drone-server的访问地址, 没用上面的域名,而是内网地址
DRONE_RPC_HOST=tom.kongzi.com:12321
DRONE_RPC_PROTO=http
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=${DRONE_RPC_PROTO} \
-e DRONE_RPC_HOST=${DRONE_RPC_HOST} \
-e DRONE_RPC_SECRET=${DRONE_RPC_SECRET} \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=runnerA \
-p 3000:3000 \
--restart=on-failure:3 \
--name runner \
drone/agent:1.6
|
配置构建流程
经过上面几步 drone环境搭好了
下面开始在drone中添加hugo编译博客的流程
访问管理界面 tom.kongzi.com
进行登录时会跳到githu网站进行授权登录
授权后 就能在管理页面中看到账户在github中的仓库了
选择仓库blog-hugo 为其配置构建流程
src-repo
将 hugo new site blog-hugo 生成的文件夹推送到仓库
github.com/duansheli/blog-hugo.git
博客文章源码通常放在blog-hugo\content\posts中
生成后博客页面位置 blog-hugo\public
blog-hugo/.drone.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
kind: pipeline
type: docker
name: default
steps:
- name: build
image: monachus/hugo:v0.59.0
environment:
GH_TOKEN:
from_secret: github_token
commands:
- hugo -t maupassant -b "https://duansheli.github.io"
- git clone https://$GH_TOKEN@github.com/duansheli/duansheli.github.io.git blgo
- cd blgo/
- rm -rf *.html *.xml
- cp -rf ../public/* ./
- git config --global user.email hello@163.com
- git config --global user.name hello
- git add .
- git commit -m bydrone
- git push
- name: notify
image: lddsb/drone-dingtalk-message
settings:
access_token:
from_secret: dingtalk_token
lang: zh_CN
msg_type: text
msg_at_all: false
when:
status:
- success
- failure
|
target-repo
最终要把页面发布到 src-repo/public中的文件放到target-repo仓库
github.com/duansheli/duansheli.github.io.git
钉钉的webhook
方案为钉钉群的机器人 通过webhook触发
- 创建钉钉群
- 为钉钉群添加机器人 选择自定义类型(webhook)
- 查看该机器人的webhook-url中的参数token
配置Secrets
关键参数(dingtalk_token,github的账户密码)并没有写在.drone.yml中
而是在管理界面为构建配置项添加的
1
2
|
github_token=7cb835xxxxx13e0c8ef79
dingtalk_token=16dcc56xxxxx1eefbe2f6
|
测试
任意写篇文章 hello.md放入项目 blog-hugo\content\posts
提交到github上后 drone会自动进行编译静态博客, 并发布到github博客中
钉钉软件中可收到任务成功或失败的消息
然后访问博客查看新文章
文章作者
duansheli
上次更新
2019-12-25
(325c7b3)