关于后端:CI加成下的jekyll博客写作

前言

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

  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 公布!

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理