关于云原生:云原生-02-阿里云云效-Flow-流水线

1次阅读

共计 2024 个字符,预计需要花费 6 分钟才能阅读完成。

系列专栏申明:比拟流水,次要是写一些踩坑的点,和实际中与文档差距较大的中央的思考。这个专栏的典型特色可能是 次佳实际,争取能在大量的最佳实际中生存。

一、利用 云效 Flow 拉取代码

对于怎么开明 云效 以及 CodeUpFlow 看 官网文档 吧。

Flow 对标的是 Jenkins / Pipeline / CICD,看文档 旧版是有配置文件 所以能够 IaC 的,新版没有找到这个性能。新版的 ClickOps 够用了,而且我的场景简直是一次性配置的,不会常常变更,所以够用了。

第一个坑点是,代码源是反对 GitHub 的,但理论并不反对。首先在墙外拉不动代码,比照镜像仓库 ACR 自带的构建性能就能够勾选用海内服务器构建,Flow 没有这个选项。其次就算连上了,速度也会很慢,而流水线是按耗时而不是次数免费的,所以代码源,包含三方库的源实际上都必须在阿里云下面。以及构建镜像时的 FROM,官网文档也倡议把根底镜像提前上传到本人的 ACR 公有仓库里,以进步拉取时的效率。跨生态是不存在的,vender lockin 了。

因而就天然引出了第二个坑点,云效的自建三方库只有 Maven 和 NPM,所以这个生态里只能用 Java 和 JavaScript。尽管实践上能够应用自建的 Nexus,但我上云效的目标不就是不想自建么。对于怎么本地开发怎么配置 .m2/settings.xml 能力应用云效提供的 Maven,以及上传一些公有包,参考 须要登录云效能力看的文档,能搜到的惯例文档里是旧版的,还没更新。Flow 里的 settings.xml 都是配置好的,应用零碎举荐不要批改就能够了。

第三个须要留神的点是 工作目录 的概念。代码是能够有多个起源的,实践上能够将来自不同上游的代码别离拉取,而后混在一起,微信小程序的分包仿佛就是这个逻辑?从体验上说 monorepo 会更直觉一点,但对多源的反对兴许落地时 对企业外部凌乱的组织架构反对更好,更容易帮忙甲方转型一点。能够将源 A 的工作目录指定为 /path/to/app-a,源 B 的工作目录指定为 /oath/to/app-b,而后应用一些诸如 cd app-b 的命令来操作。

以上,尽管云效是 ClickOps 但刻意没有附云效的截图和代码片段,一是因为没有 IaC 不想贴脚本,等找到了再来更新这个局部;二是交互做得意外的不错吧,按提醒到处点点上手很快的。

二、应用自定义镜像构建

流水线有很多步骤,Flow 默认倡议的是代码扫描、构建、部署等等,这里次要探讨构建过程。

Flow 有很多筹备好的构建环境,如 Java 构建,Go 构建等等,其中 Java 构建又分为 JDK 1.8,OPENJDK 11,Maven 2.x,3.x 等等。这些看似会带来易上手的开箱体验,但理论用起来就发现十分不可控。比方只能从反对的 JDK major 版本里抉择,如果非凡状况下要指定到 minor 版本就更不可能了。

实际上咱们须要的是 Drone Runner 那种计划,用户自行筹备镜像,每个步骤用镜像挂工作目录去执行构建,在 Flow 里这个叫做 自定义环境构建。

目前美中不足的是 只反对公开仓库 的镜像(反对自建的公有仓库但这里的服务链接形式我没搞定),不晓得它为什么不反对 ACR 公有仓库。那么问题就来了,如果应用开箱的 Java 构建,平台会把 settings.xml 都配置好了,应用自定义的镜像显然没有这个。同时,因为自定义镜像必须放在公网,所以也不可能将 带用户名明码的 settings.xml 打进镜像里。

目前我采纳的计划是另开了一个 CodeUp 仓库 secrets,将明文的 settings.xml 放在仓库里,并将它指定成为代码源的 /root/workspace/secrets 工作目录。下面提到过,第一步拉取代码源反对多源多工作目录,所以到构建这一步的脚本就形如:

cd /root/workspace/app
mvn -s /root/workspace/secrets/settings.xml clean package

翻了一下文档,发现 secrets/settings.xml 应该还能够反对其它下载方式,比方从 OSS 下载,或者 CodeUp 加密仓库等等,这里就不深究了。以上次要提供的思路点是利用不同的 工作目录,将不敏感和敏感的内容,别离存储,再混合应用。

三、公布到 镜像仓库 ACR

这一步很简略,应用平台提供的 镜像构建并推送至阿里云镜像仓库个人版 即可。因为理论的简单构建工作是在前续步骤实现的,这里只有将 /root/workspace/app 挂载下来,Dockerfile 里也只须要简略写几行 COPY fromxx toxx 就好。

会有一个向导帮你建设到 ACR 的服务链接,实际上执行的应该是 docker run build & push,记得在 tag 上标记版本,我应用的是 release-${BUILD_NUMBER},因而推送进仓库的镜像形如 registry.cn-hangzhou.aliyun/lisitede/app:release-8。最终用来启动容器的就是这个镜像。

正文完
 0