自动构建
自动构建知识库
MkDocs+Jenkins+Gitee+Nginx
实现效果:当代码推送到笔记仓库后,立即触发 Jenkins 构建任务,并发布笔记到云服务器上。
适用场景:
准备
流程
服务器
- 服务商:腾讯云轻量级服务器
- ip:114.132.62.78
- 版本:Ubuntu20.04
如果是腾讯云的 ubuntu20.04,需要先执行以下准备工作:
| # 初始化 root 用户
$ sudo passwd root
# 开启 ssh 远程访问
$ echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
$ sudo service ssh restart
|
添加新用户
本文默认都是使用 cifer 用户进行操作。
| # 添加用户
sudo adduser cifer
# 添加到 sudo 组
sudo usermod -aG sudo cifer
# 切换用户
su cifer
|
Gitee 仓库
自己创建一个专门存放笔记的项目仓库。
Python3
apt 工具包更新后自带 Python3.8.10
| # 更新本地包
sudo apt update
# 检查 python 版本
python3 -V
|
安装 mkdocs 相关依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | # 安装 virtualenv
$ apt install python3-virtualenv
# 创建虚拟环境
$ mkdir ~/envs
$ cd ~/envs
$ virtualenv mk
# 激活虚拟环境
$ source ~/envs/mk/bin/activate
# 安装 mkdocs
$ pip install mkdocs
# 检查 mkdocs 版本
$ mkdocs -V
# 安装 mkdocs-material
$ pip install mkdocs-material
|
备注:如果安装库网速慢,可以给pip install
加上豆瓣镜像选项,例如:
| pip install mkdocs -i https://pypi.douban.com/simple
|
mkdocs 的配置文件 mkdocs.yml
:
1
2
3
4
5
6
7
8
9
10
11
12
13 | site_name: 百里测试小站
site_description: 百里测试小站
site_author: 百里
theme:
name: material
markdown_extensions:
- attr_list
- admonition
- toc:
permalink: true
- pymdownx.tasklist:
custom_checkbox: true
|
Java11
| # 安装 openjdk
$ apt install openjdk-11-jdk
# 检查安装结果
$ java -version
|
记住 Java 可执行文件路径:/usr/lib/jvm/java-11-openjdk-amd64
,后面配置 Jenkins 代理节点需要。
Docker
预备依赖
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 | # 更新本地包
$ sudo apt update
# 安装必要的一些依赖
$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
# 为 Docker 仓库添加 GPG key:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 把 Docker 仓库添加到 APT 源:
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
# 安装 docker
$ sudo apt install docker-ce
# 验证安装结果
$ docker --version
# 添加分组(避免每次输入 sudo)
$ sudo usermod -aG docker cifer
# 切换用户(这时需要输入密码)
$ su - cifer
# 检查权限(预期:cifer sudo docker)
$ groups
|
Nginx
| # 初始化挂载目录
$ mkdir -p ~/nginx_mount/conf
$ mkdir -p ~/nginx_mount/html
$ mkdir -p ~/nginx_mount/logs
# 修改目录权限(以便 mkdocs 生成的资源可以拷贝覆盖其中)
$ chmod 777 ~/nginx_mount/html
# 添加配置文件
$ vi ~/nginx_mount/conf/nginx.conf
|
配置信息内容,并保存。
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 | events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
location / {
root html;
index index.html index.htm;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
|
启动 nginx 容器:
| # 启动 Nginx 容器
$ docker run -d --name nginx-cifer -p 80:80 -v ~/nginx_mount/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx_mount/html:/etc/nginx/html -v ~/nginx_mount/logs:/var/log/nginx nginx
|
备注:记得在云服务器中的安全组(阿里云)/防火墙(腾讯云)中开放 80
端口。
Jenkins
1 运行容器
1
2
3
4
5
6
7
8
9
10
11
12
13 | cd ~
# 初始化挂载目录
$ mkdir jenkins_mount
# 修改权限
$ chmod 777 jenkins_mount
# 启动 Jenkins 容器
$ docker run -d -p 8080:8080 -p 50000:50000 -v $PWD/jenkins_mount:/var/jenkins_home --name jenkins-cifer jenkins/jenkins:lts
# 查看容器运行情况
$ docker ps
|
备注:记得在云服务器中的安全组(阿里云)/防火墙(腾讯云)中开放以上端口。
2 初始化
访问地址:http://114.132.62.78:8080/
获取管理员密码:
| # 查询 Jenkins 解锁密码
$ cat ~/jenkins_mount/secrets/initialAdminPassword
|
解释:因为是容器,所以用容器挂载目录~/jenkins_mount 替换/var/jenkins_home 即可。
添加用户
3 安装插件 ¶
4 添加代理 ¶
菜单路径:http://114.132.62.78:8080/computer/
绑定 Ubuntu20.04 宿主机作为节点,用来实际执行 python3 脚本。
如果日志提示:Agent successfully connected and online
,则表示代理节点启动成功。
代理节点正常时的节点列表状态:
5 创建任务 ¶
标签表达式:填入代理节点的名称,例如 tencent-ubuntu
|
- 面板:构建触发器
- Gitee webhook 触发构建
备注:此选项只有在 Jenkins 安装了 Gitee 插件后才可以使用。
生成密码后,可以进入 Gitee 仓库的管理菜单中,进行 webhook 的配置:URL:当前选项自动生成的地址 WebHook 密码:当前生成的密码串 选择事件:Push
选择:执行 shell
1
2
3
4
5
6
7
8
9
10
11
12
13 | #!/bin/bash
# 激活虚拟环境
source /home/cifer/envs/mk/bin/activate
# 构建项目
mkdocs build
# 修改文件权限
chmod 777 site/*
# 拷贝到 nginx 目录
cp -r ~/jenkins_mount/workspace/testie-notes/site/. ~/nginx_mount/html/
|
备注:testie-notes
为 Jenkins 的 job 名称。
如果非虚拟环境,则加上 python3 -m 来执行:
到此,任务已经配置完毕,可以尝试手工触发执行 job,验证构建结果是否成功。
2023-09-16 18:54 2024-07-09 23:10