前言
始终搭建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/dockernetworks: default: external: name: jenkins
给jekyll我的项目增加Dockerfile
这里应用事后编译好的_site文件夹,若果有需要能够在Dockerfile加上build的局部
FROM nginxCOPY ./_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改良,让编译局部在云端进行。
参考文章
[Using Docker-in-Docker for your CI or testing environment? Think twice.]
[Docker 官网装置文档]
[jenkins 官网镜像]
[Gogs 官网镜像]
[Jenkins配置Gogs webhook插件]
本文由博客一文多发平台 OpenWrite 公布!