共计 2134 个字符,预计需要花费 6 分钟才能阅读完成。
前言
始终搭建 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 官网装置文档]
应用 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/docker
networks:
default:
external:
name: jenkins
给 jekyll 我的项目增加 Dockerfile
这里应用事后编译好的_site 文件夹, 若果有需要能够在 Dockerfile 加上 build 的局部
FROM nginx
COPY ./_site /usr/share/nginx/html/
COPY ./nginx.conf /etc/nginx/nginx.conf
EXPOSE 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 改良,让编译局部在云端进行。
参考文章
[Using Docker-in-Docker for your CI or testing environment? Think twice.]
[Docker 官网装置文档]
[jenkins 官网镜像]
[Gogs 官网镜像]
[Jenkins 配置 Gogs webhook 插件]
本文由博客一文多发平台 OpenWrite 公布!
正文完