git上托管的代码如何部署在阿里云上_如何基于阿里云Codepipeline部署Laravel应用到阿里云Kubernates集群?...

b34cfa2ae4468e587b1b5a84af36d886.png

使用阿里云Kubernates集群已经快1年,稳定性还是可以保证,折腾了几次,反复重启工作节点,K8S还是能自动将应用调度到其他节点,感觉非常稳定。

原本想着让多个docker容器共享一套代码,将Session保存到redis上,实现无状态化,因此将代码放NAS,让应用容器挂载到NAS上,但Laravel的磁盘IO太惨不忍睹了,即使NAS选择SSD,加载缓存页面依然速度感人,竟然需要2、3秒,无法忍受啊,用clockwork查看服务器端发现大部分时间消耗在磁盘IO上,因此只能折中将Laravel代码部署到每个工作节点,让docker容器挂在宿主机相应代码目录,速度一下就起来了。

今天无意中看到jenkins持续集成、持续部署的技术文档,并且阿里云有现成的解决方案----CodePipeline:阿里云CodePipeline是兼容Jenkins标准的、提供快速可靠的持续集成与持续交付服务。基于容器技术和阿里云基础服务架构,提供稳定和安全的代码/Docker编译构建,测试,扫描和部署的工具服务,并提供Pipeline As Code的编码级配置模式,满足应用程序和基础设施快速可靠的交付和更新。

即通过CodePipeline能自动将git服务器上的代码经过构建docker镜像自动部署到Kubernates 集群中,急不可耐的试了下,果然爽歪歪,可直接将代码部署到镜像中,并且每次更新代码都会触发自动构建新镜像并部署到K8S集群中,构建流程如下:

1、托管代码

将Laravel应用代码代码托管到码云(http://gitee.com)、阿里Code(http://code.aliyun.com)等,push提交代码的时候通过webhooks绑定触发链接触发重新构建docker镜像;

2、创建docker镜像仓库

bb709e6b492c4d00e2b07b0439564569.png
进入阿里云容器镜像平台,创建命名空间,输入仓库名称点击下一步

7cf92dbe6f94c9428691278835e282ca.png
代码源选择本地仓库,因为后续是通过CodePipeline自动构建docker镜像并推送到当前创建的镜像仓库中

3、创建CodePipeline项目执行构建

be84cf50cfaec11e91cda5bcef4ac29a.png
填写项目名称,选择要构建项目所用语言,点击下一步

4425793659c27eb952aee6071b65b265.png
设置仓库地址,并选择要构建的分支,仓库证书可“用户证书”处添加仓库账号密码,并在此处选择

e3e9fffb0012089bf1a6fa0f1b4f778c.png
设置构建执行命令,如laravel做git版本控制的时候会忽略vendor等文件夹,可通过composer install命令自动安装依赖包,composer镜像源可使用阿里云:https://mirrors.aliyun.com/composer/,速度杠杠的,安装好依赖包之后可以执行phpunit单元测试检查是否正常,正常才会执行下一步操作

c1483789b9e78dc6f4220bad9f361cd0.png
选择部署到kubernates,镜像名称需要先到kubernates镜像管理服务平台创建私有镜像仓库,Registry证书即仓库用户名和密码,Dockerfile路径可默认,并在托管代码根目录添加一个Dockerfile同名文件,用于打包操作

567e10f314deda5c42dbbf8d9080caa0.png
在项目配置页面,点击 构建触发器 tab,勾选 远程触发器,在 代码分支 对话框输入指定触发项目的代码分支,单击 生成 按钮。最后复制触发器地址。然后到代码托管服务器创建webhook,并将该链接粘贴过去,这样push代码的时候就能自动触发codepipeline自动构建docker镜像。

ed3da3f38cde9788a65043843835d36e.png
填写了代码分支的触发器,不再能通过curl来触发。请按照以上步骤,通过代码仓库的TEST HOOK 来测试。如果代码分支为空,生成的触发器仍然可以通过curl来测试,但直接在代码仓库的 Webhooks 中使用,则任何代码分支的变更都会触发构建。curl触发器的沉默期为30s,即两次调用触发器的最短间隔不得少于30s

4、创建Kubernates应用部署

CodePipeline支持通过deployment.yaml部署文件部署,但比较麻烦,这里我们就直接通过k8s管理后台手动创建无状态应用部署,并将CodePipeline中部署Kubernetes(新)步骤删除掉

583924c182a3880c2e1f214351bdebe0.png
由于将session存储到redis,文件上传存储到oss,使得laravel无状态化,方便容器组自动扩容(根据CPU、内存指标),可以应对突发访问

d9bcaabf3013e25f3e92649d3c0d0d41.png
创建应用重新部署链接,通过访问该链接即可触发部署重新拉取docker镜像完成应用更新

32ae3a289186858a2f1ff8af6572d148.png
新建一个步骤,使用curl访问重新部署触发链接,从而触发重新构建docker镜像

通过以上流程,点击立即构建或者push代码更新到托管平台即可自动触发docker镜像构建,通过这种方式,可以直接将代码git clone到镜像内部,因为每次更新代码之后都会自动触发镜像构建,构建完成之后自动触发k8s应用部署。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值