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

6次阅读

共计 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

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

正文完
 0