前言
始终搭建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 公布!
发表回复