前言

始终搭建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

  1. 首先,在Jenkins插件治理里边搜寻Gogs,并装置,参照[Jenkins配置Gogs webhook插件]。
  2. 在Gogs建设仓库后,找到webhook选项并配置推送动作,参照[Jenkins配置Gogs webhook插件]。
  3. 建设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 公布!