前言Jekyll已经搭建好,只能离线使用,只能使用服务器上的git作为远程仓库帮助管理,主要是jekyll部署比较麻烦(除了直接使用jekyllserve,不过这个会带来安全隐患),所以网上的jekyllblog一直没有更新。由于最近有相当一部分代码需要加入CI,所以顺便也包含了jekyll。由于本身需要的服务不多,又不想把个人博客留在第三方的git平台上,git仓库和CI都是使用自部署组件,所以这里使用老三:DockerJenkinsCIGogs选用各组件原因Docker:虽然现在云服务器支持使用k3s进行容器管理,但是资源消耗还是低于dockerswarm。JenkinsCI:经典的CI/CD组件,虽然比后来的star更耗性能,但是插件够用,对CI的性能影响不是很大。Gogs:一个轻量级的git管理工具。如果不想用Sqlite做Mairadb服务,也很适合。它还具有Webhook等功能。打开并安装Docker这里可以使用系统自带的包管理器安装docker,也可以使用Docker官方提供的教程添加Docker的第三方源安装最新版本。[Docker官方安装文档]使用Docker部分Gogs和Jenkins服务Gogs.ymlversion:'3'services:gogs:image:gogs/gogs:latestrestart:alwayscontainer_name:gogsports:-"${ssh-port}:22"-"${web-port}:3000"networks:-default-database-jenkinsexternal_links:-mariadb-jenkins-mastervolumes:-"${gog-data}:/data"-"${gog-repo}:/data/git/gogs-repositories"networks:default:external:name:gogsjenkins:external:name:jenkinsJenkins.ymlversion:'3'services:jenkins-master:image:jenkinsci/blueocean:latestprivileged:true重启:总是用户:根端口:-${web-port}:8080-${agent-port}:50000container_name:jenkins-mastervolumes:-${data}:/var/jenkins_home-/var/run/docker.sock:/var/run/docker.sock-/usr/bin/docker:/usr/bin/docker-/etc/docker:/etc/dockernetworks:默认值:外部:name:Jenkins添加一个Dockerfile到jekyll项目。在这里,使用预编译的_site文件夹。如有必要,您可以将构建部分添加到Dockerfile。从nginxCOPY./_site/usr/share/nginx/html/COPY./nginx.conf/etc/nginx/nginx.confEXPOSE80Jenkins配置GogsWebhook首先在Jenkins插件管理中搜索Gogs并安装,参考【Jenkins配置Gogswebhook插件】在Gogs中创建仓库后,找到webhook选项并配置推送动作,参考【Jenkins配置Gogswebhook插件】。构建Jenkins项目,填写管道脚本如下:build'){steps{sh'dockerbuild-tmy_jekyll_blog:latest.'}}stage('deploy'){steps{sh'dockerstopjekyll_blog||真&&dockerrmjekyll_blog||true'sh'dockerrun-it-d--namejekyll_blog-p80:80my_jekyll_blog:latest'}}}post{cleanup{deleteDir()}}}||的使用这里的true是当兼容容器不存在时返回错误,会导致自动构建停止测试。访问Gogswebhook界面,点击Test,查看项目是否正常构建。改进现在只使用docker的容器部分。可以考虑使用swarm设置来完善Dockerfile,让编译部分在云端进行。参考文章【在你的CI或测试环境中使用Docker-in-Docker?三思而后行][Docker官方安装文档][jenkins官方镜像][Gogs官方镜像][Jenkins配置Gogswebhook插件]本文由多发博客平台OpenWrite赞助发布!
