跳转至

自动构建

自动构建知识库#

MkDocs+Jenkins+Gitee+Nginx

实现效果:当代码推送到笔记仓库后,立即触发 Jenkins 构建任务,并发布笔记到云服务器上。

适用场景:

  • 个人知识库
  • 技术分享
  • 简历加分

准备#

流程

服务器

  • 服务商:腾讯云轻量级服务器
  • ip:114.132.62.78
  • 版本:Ubuntu20.04

如果是腾讯云的 ubuntu20.04,需要先执行以下准备工作:

1
2
3
4
5
6
# 初始化 root 用户
$ sudo passwd root

# 开启 ssh 远程访问
$ echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
$ sudo service ssh restart

添加新用户

本文默认都是使用 cifer 用户进行操作。

1
2
3
4
5
6
7
8
# 添加用户
sudo adduser cifer

# 添加到 sudo 组
sudo usermod -aG sudo cifer

# 切换用户
su cifer

Gitee 仓库

自己创建一个专门存放笔记的项目仓库。

Python3#

apt 工具包更新后自带 Python3.8.10

1
2
3
4
5
# 更新本地包
sudo apt update

# 检查 python 版本
python3 -V

安装 mkdocs 相关依赖

  • mkdocs
  • mkdocs-material
 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加上豆瓣镜像选项,例如:

1
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#

1
2
3
4
5
# 安装 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#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 初始化挂载目录
$ 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 容器:

1
2
# 启动 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

获取管理员密码:

1
2
# 查询 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 创建任务 #

  • 面板:General

  • 限制项目的运行节点

标签表达式:填入代理节点的名称,例如 tencent-ubuntu

  • 面板:源码管理

  • Git

|

  • 面板:构建触发器
  • 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

评论