前言
一直搭建jekyll以来只在线下使用,仅仅使用git放在服务器上作为远程仓库帮忙管理,
主要是jekyll部署时候比较麻烦(除直接使用jekyll serve,但这样会带来安全上的隐患),
所以一直都没有更新线上的jekyll博客。
由于最近需要把相当部分的代码加入CI,顺便着把jekyll也纳入其中。
由于本身需求的服务并不多,加上并不想将个人博客丢在第三方git平台,
git仓库跟CI均使用能自行部署的组件,所以这就用了这老三样:
- Docker
- Jenkins CI
- Gogs
- Docker:虽然现在云服务器支持使用k3s进行容器管理,但资源消耗来说还是docker swarm更低些。
- Jenkins CI: 经典的CI/CD组件,虽然跟后期之秀比性能消耗比较大,但是插件够多,就CI来说性能影响并不大。
- Gogs:轻量级的git管理工具,如果不想起Mairadb服务使用Sqlite也合适,自身还带Webhook等功能。
这里使用系统本身的包管理器安装docker即可,亦可使用Docker官方给的教程添加Docker第三方源安装最新版。
[Docker 官方安装文档]
使用Docker部署Gogs和Jenkins服务
Gogs.yml
version: '3'
services:
gogs:
image: gogs/gogs:latest
restart: always
container_name: gogs
ports:
- "${ssh-port}:22"
- "${web-port}:3000"
networks:
- default
- database
- jenkins
external_links:
- mariadb
- jenkins-master
volumes:
- "${gog-data}:/data"
- "${gog-repo}:/data/git/gogs-repositories"
networks:
default:
external:
name: gogs
jenkins:
external:
name: jenkins
Jenkins.yml
version: '3'
services:
jenkins-master:
image: jenkinsci/blueocean:latest
privileged: true
restart: always
user: root
ports:
- ${web-port}:8080
- ${agent-port}:50000
container_name: jenkins-master
volumes:
- ${data}:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /etc/docker:/etc/dockernetworks:
default:
external:
name: jenkins
给jekyll项目添加Dockerfile
这里使用预先编译好的_site文件夹,若果有需求可以在Dockerfile加上build的部分
FROM nginx
COPY ./_site /usr/share/nginx/html/
COPY ./nginx.conf /etc/nginx/nginx.confEXPOSE 80
Jenkins配置Gogs Webhook
- 首先,在Jenkins插件管理里边搜索Gogs,并安装,参照[Jenkins配置Gogs webhook插件]。
- 在Gogs建立仓库后,找到webhook选项并配置推送动作,参照[Jenkins配置Gogs webhook插件]。
- 建立Jenkins 项目, 填写流水线脚本如下:
pipeline { agent any stages { stage('Git') { steps { git 'http://xianzelin.top/bidaya0/jekyll_blog.get' } } stage('build') { steps { sh 'docker build -t my_jekyll_blog:latest .' } } stage('deploy') { steps { sh 'docker stop jekyll_blog || true && docker rm jekyll_blog || true' sh 'docker run -it -d --name jekyll_blog -p 80:80 my_jekyll_blog:latest' } } } post { cleanup { deleteDir() } } }
这里用|| true 是为了兼容容器不存在时返回错误导致自动构建停止
在Gogs的webhook界面点击测试,查看项目是否正常构建。
改进点
- 现在只采用了docker的容器部分,可以考虑使用swarm的设置
- 可以对Dockerfile改进,让编译部分在云端进行。
[Docker 官方安装文档]
[jenkins 官方镜像]
[Gogs 官方镜像]
【CI加成下的jekyll博客写作】[Jenkins配置Gogs webhook插件]
本文由博客一文多发平台 OpenWrite 发布!