要做自动化运维,核心是持续集成/部署(CI/CD). 那么之前我们已经准备好了主从的本地镜像存储harbor.现在开始真正的第一步,部署本地的git仓库. 选用gogs (原因详见zhihu)
0x00. 相关准备
参考文档:
- gogs-docker官方文档
- gogs-webhook-plugin
- gogs+k8s , github经验这里补充说一下,关于gogs 集成到k8中的文档实在太少,所以目前慎重集成.
默认需要有docker环境,在k8中就更不用说了,注意的是我这是跟harbor放在一个节点上,
0x01. docker上手
查了不少资料,目前在docker上整个部署要快速稳定不少,k8的部署缺乏参考资料,yaml文件主要靠自己配置,等之后熟悉了才能开始. 先在裸docker中搭建个本地的gogs环境.
docker的话简单的就是直接docker pull gogs/gogs 了. (18年1月最新版是V 0.11)
不过因为网络原因要离线安装的可以导出个包.使用docker save docker.io/gogs/gogs:latest > gogs.tar 的方法可以离线出image. 多个image加空格.
加载完镜像之后.通过两条命令就可以简单运行了. (更新: 如果想高级的使用gogs的SSH,可以参考这篇blog)
1 | #1. 创建映射文件夹 |
然后访问本机ip:10080 ,就会发现命令界面出现[Macaron] Completed GET /install 200 OK in 249.195215ms 的字样. 然后浏览器显示如下:
这里自适应浏览器语言,中文对照是一样的. 注意这里面有几个参数是必须修改的. 切不能无脑下一步了
首先默认数据库最新版已经换成了Mysql ,如果是开发人员<50人. 我觉得用SQLlite3是完全足够的,而且简化配置. 所以这里 : 我两个都试试. 切换到SQLite3之后下面的几个要填的都没了.
然后APP名字不需要用默认的Gogs,建议修改. 下面的Domain 和Application URL 修改为自己的主机ip. SSH Port 这里有个可选项使用内置SSH服务器. 但是参考官方文档说明 :
Builtin SSH server is not recommended inside Docker Container
所以这里不能勾选. 其他地方的都有详细解释,特别需要注意的是端口映射不能有冲突. (比如docker/k8跑了其他服务).
最关键的一个设置:
SSH Port: Use the exposed port from Docker container. For example, your SSH server listens on
22inside Docker, but you expose it by10022:22, then use10022for this value.HTTP Port: Use port you want Gogs to listen on inside Docker container. For example, your Gogs listens on
3000inside Docker, and you expose it by10080:3000, but you still use3000for this value.Application URL:
http://192.168.99.100:10080/
所以这里需要改两个参数. 修改截图如下
- 把 SSH Port默认的22改成10022.
- 把ApplicationURL 默认的参数改成 :
ip:10080
其他就没什么了,最后就是附加选项里面有一些生产可能有用的. (邮件验证注册等)
最后这可以自助创建一个用户,也可以你等下自己创建. Both is ok~ 日志模式退出后需要docker start gogs 重启启动. 然后后续就自己创建项目,测试一下push/pull 或者ssh的连接了. 暂不多说
0x02.与jenkins集合
gogs可用之后,根据我们的CI/CD路线,需要触发git-hook去启动jenkins工作.这里首先确保ssh的问题.如下图所示:
当我直接使用gogs提供的SSH地址克隆项目发现失败,使用我在本地.ssh/config 配置的lgogs别名成功,上面使用别名测试提示gogs没有提供shell的权限 . 这说明所谓的git用户,不是在本机上,而是在gogs的容器内部. 为了确认这一问题. 进入gogs容器验证发现果然如此.
我们CI/CD需要两个,一是jenkins的pipeline跟gogs搭配.(核心是jenkinsfile). 另一个就是自动触发jenkins,这个依赖git-hook. 那么在jenkins的插件搜索gogs? (gogs插件是什么作用呢? 简单化webhook)
安装好gogs插件后,在gogs的仓库设置新建一个webhook. url填写参考issue8. 因为我们是pipeline项目.job填写的时候需要项目名/分支名 .完成后测试一下webhook,成功继续下一步.
然后拉取测试项目,提交一份文件.push到仓库,如下图效果. 可以看到已经自动化的执行了.而且UI挺不错.那么下一步就是开始测试真正的项目构建了. 以常见的java项目为例. 详情参考我的jenkins文章. 这里就告一段落
0x03.gogs的https化
因为k8+docker+harbor已经基本https化了. gogs本身也支持自签证书https化.后续补上.






