Jenkins搭建
首先得有个Jenkins服务,在阿里云的容器里面搭jenkins很简单,基本上按照文档搞就行了,https://www.alibabacloud.com/help/zh/doc-detail/42988.htm。
流程:
1.申请ecs主机
2.创建swarm集群,绑定ECS主机作为节点
3.在集群中创建应用,选择Jenkins模板
4.访问Jenkins master,初始化配置,用户,安装插件
5.使用内网ip绑定Jenkins slave
创建CI和CD任务
接下来我们就可以配置jenkins上的项目了,大体流程可以参见上文阿里云的文档。只是文档是以gitbub代理为例讲解,而我们的代码托管在coding上,配置过程稍有不同。
要让jenkins拉取coding的源码,需要在jenkins上部署相关证书。使用开发者所用证书,明显是一种不安全的做法,所幸coding跟gitlab一样可以设置专门的只读部署证书。
集成日志服务
一个舒适的开发环境怎么能离开得了好的日志服务,阿里云集成日志服务同样很简单。
配置过程仍然可以参见阿里云文档https://www.alibabacloud.com/help/zh/doc-detail/26036.htm,这里同样只列出我踩过的坑。
为了对日志分析友好,我们选择了json格式的日志formatter,但是阿里云的容器日志默认会自动添加时间戳,破坏了日志的格式,我们修改一下默认配置
我们服务端采用了golang,为了使docker镜像最小化,采用了scratch作为base,发现了一个问题,由于没有时区设置,日志打印时间总是跟我们的当地时间相差了8个小时,解决方法是在镜像中加入相关的配置文件。
获取应用版本
测试环境上,我们经常有这样的困扰,现在环境中部署的代码到底是对应哪个版本的呢。
解决方案就是在build docker镜像的时候在jenkins脚本中把commit-id作为ARG传入,设置到镜像的ENV中,通过一个特殊的后门接口返回。
jenkins脚本中写入,docker build --build-arg VERSION_ARG=$GIT_COMMIT -t ...
Dockerfile中写入
ARG VERSION_ARG=not_from_jenkins
ENV VERSION $VERSION_ARG