阿里云上的Devops实践

元家昕 · · 2057 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

敏捷开发少不了一个方便的持续交付环境。这些天在阿里云简单搭了一套开发环境,这里简单记录一下搭建过程。

先盗张图


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

过程中有几个点需要稍微注意的:

jenkins slave的账号密码是jenkins/jenkins

jenkins slave的Dockerfile可以在github中找到,https://github.com/AliyunContainerService/jenkins-slaves,有问题可以直接看配置

中间过程出现Error 403 No valid crumb was included in the request,可以在master上修改安全设置,取消“防止跨站点请求伪造”勾选

创建CI和CD任务

接下来我们就可以配置jenkins上的项目了,大体流程可以参见上文阿里云的文档。只是文档是以gitbub代理为例讲解,而我们的代码托管在coding上,配置过程稍有不同。

要让jenkins拉取coding的源码,需要在jenkins上部署相关证书。使用开发者所用证书,明显是一种不安全的做法,所幸coding跟gitlab一样可以设置专门的只读部署证书。

我们在jenkins master上生成ssh证书,把公钥配置到coding相应项目中,然后在jenkins中配置证书使用方式,done。

要使用coding格式的webhook,需要先要在jenkins上安装coding的插件,然后配置jenkins的插件和coding里面的webhook,过程参见https://open.coding.net/ci/jenkins/

实际过程里面踩了一个坑。我想要配置成develop分支有推送的时候自动触发构建和部署,试了好几种写法都不成功,最后发现只能写成这样

develop前面不能添加origin,remote,ref之类的任何前缀。  -_-||

不过过程中倒是让我掌握了一个调试的技巧,coding的webhook配置页面有提供重发的功能,不需要每次提交代码测试。那么jenkins端怎么调试呢?可以在系统配置中打开coding插件的日志

发现了这么类似这样的一个日志

谜题解开了。

集成日志服务

一个舒适的开发环境怎么能离开得了好的日志服务,阿里云集成日志服务同样很简单。

配置过程仍然可以参见阿里云文档https://www.alibabacloud.com/help/zh/doc-detail/26036.htm,这里同样只列出我踩过的坑。

为了对日志分析友好,我们选择了json格式的日志formatter,但是阿里云的容器日志默认会自动添加时间戳,破坏了日志的格式,我们修改一下默认配置

配置日志用json方式解析以后,可以看到这种结构化输出的日志

还可以对日志进行分析,比如说分析restful接口返回status的分布

我们服务端采用了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


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:元家昕

查看原文:阿里云上的Devops实践

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2057 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传