通过 Jenkins 和 gogs 自动发布 Hugo 博客到 VPS

Hugo 博客是使用 Go 语言编写的静态博客引擎,可以快速将 markdown 博文转换成 HTML 文件。

环境:Ubuntu 16.4 + Nginx

Jenkins 的安装

  • . 安装 Jenkins :
wget -q -O - https://jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
  • . 通过命令进行升级:
sudo apt-get update
sudo apt-get install jenkins
  • . 通过命令来启动、停止Jenkins:
sudo service jenkins start   # 启动Jenkins
sudo service jenkins stop    # 停止Jenkins
sudo service jenkins restart # 重启Jenkins
  • . 访问Jenkins:
http://localhost:8080
  • . 查看Jenkins 文件路径:
配置文件:/etc/default/jenkins
安装路径:/var/lib/jenkins
日志路径:/var/log/jenkins

Jenkins 安装好后,默认端口是8080,如果发现使用上述路径 ( http://localhost:8080 ) 无法访问Jenkins,可能是因为其他的程序占用了该端口,需要修改为其他的端口:

修改文件:/etc/default/jenkins

HTTP_PORT=8081

然后重新启动Jenkins :

sudo service jenkins restart

然后根据Jenkins 提示进行配置

使用 Nginx 进行方向代理

在 Nginx 配置目录: /etc/nginx/conf.d 添加配置文件:

server {
    listen       443;
    server_name  Jenkins;
    debug_http;
    client_max_body_size 60M;
    client_body_buffer_size 512k;
    location / {
        proxy_pass
        http://localhost:8081;
        proxy_redirect  off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    ssl_certificate /etc/letsencrypt/live/Jenkins/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/Jenkins/privkey.pem; # managed by Certbot
}
server {
    listen       80;
    server_name  Jenkins;

    if ($host = Jenkins) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
}

Jenkins 是指你自己的域名

我这里将所有HTTP 请求重定向到了 HTTPS

现在我们可以通过 https://Jenkins 来访问 Jenkins 了。

安装 Jenkins 插件:

这里我们需要安装两个插件:

Gogs plugin
Publish Over SSH

登录 Jenkins ,在 系统管理 --> 插件管理 中搜索上述两个插件并安装

Jenkins 持续集成配置:

在进行配置之前,我们需要添加两个凭证:

在 Jenkins 主页点击 凭证 --> 系统 --> 全局凭证 进入凭证列表页面,点击 添加凭证 ,我们需要添加两个凭证:

Username with password        # 用来登录 Gogs
SSH Username with private key # 用来登录 VPS

配置 Jenkins 持续集成:

  • 添加任务,配置如下:

    • Gogs Webhook 下选择 Use Gogs secret
    • Source Code Management 下选择 Git 并在 Repository URL 填写 git 地址,在 Credentials 选择我们上面配置的凭证
    • Build 下添加两个命令:
rm -rf public
hugo
  • Post-build Actions 添加在上面添加的登录 VPS 的凭证,并在 Source files 添加:
public/**
  • Exec command 添加需要在你服务器执行的命令,也可以不填,默认文件会复制到 SSH Server 服务器配置的目录下。

以下是图片配置截图:

Gogs Webhook

Source Code Management

Build

Post-build Actions

添加 Gogs 钩子:

在 Gogs 博客的 git 项目 下,点击 仓库设置 --> 管理 WEB 钩子 添加一个钩子,以便在你 push 后可以通知 Jenkins 来自动生成博客,并将博客部署到 VPS。

  • 推送地址 下添加钩子地址:
https://<Jenkins Server Address>/gogs-webhook/?job=<Jenkins 任务名称>
  • 数据格式 下选择 application/json ,保存。

可以在底部点击测试推送,查看 Jenkins 是否可以收到推送并进行自动部署到 VPS 。

That's All.