1. 需求
开发环境是开发测试人员使用的应用环境,除了应用运行依赖的云产品,还需要购买开发人员使用的云产品和运维产品。
主要有:
- 云效持续集成
- maven 私有仓库
- gitlib 代码仓库
- Node模块仓库
- 镜像仓库购买
- 开发环境应用运行环境
2.云效与相关配置
2.1 maven 代码仓库:
私有仓库配置:
- maven 工具的 profiles 节点,增加私有仓库的 repository;
- settings 文件加入代码库根目录或者根目录下 pom.xml 增加 repository节点,指向私有仓库。
上传私有仓库:
使用migrate-local-repo-tool.jar(来自开源工具) 上传:
$ java -jar migrate-local-repo-tool.jar -cd "/$HOME/.m2/repository/" -t "http://10.21.11.11/repository/releases/" -u admin -p admin123
踩坑与优化:
- 避免使用上传单个文件方式,该方式上传 jar的话,不要使用默认的生成 pom.xml 方式,此方式容易覆盖原来已有 pom.xml 导致依赖问题。
- 开发人员使用migrate-local-repo-tool.jar 批量上传的时候,可能会把开发人员本地的 老版本的 jar 包直接覆盖仓库的对应 jar,导致其它使用到该依赖 jar 包的系统打包时候,出现故障。
优化:
开发人员使用通用依赖 Jar 使用正式版本,避免使用 snapshot 版本;
优化改造migrate-local-repo-tool.jar 工具,其来自以下开源代码,可以通过修改代码,在运维平台开发对比上传模块,首先比对开发人员本地和线上私有仓库依赖包,经过用户在运维平台确认后发布。
https://github.com/simpligility/maven-repository-tools/tree/master/maven-repository-provisioner
2.2 gitlib 代码库:
本地弹内代码迁移:
- 从原弹内代码地址克隆一份裸版本库到本地;
git clone --bare http://gitlab.xxx-inc.com/****/****.git
- 云效上建立项目和应用,并建立git仓库;
- 将本地下载的裸版本库 push到新建的政务云 git仓库;
- 清理不需要保存到云效的原有分支,批量删除本地分支:
git branch -a | grep 'release' | xargs git branch -D git tag | xargs -I {} git tag -d {}
- 上传本地代码库
git push --mirror https://xxx.code.aliyun.com/3333-zzzz/*****.git
- 这时可以看到完整的原弹内代码已经迁移到了政务云仓库,并保留了弹内所有的变更提交记录。
- 清理不需要保存到云效的原有分支,批量删除本地分支:
- 下载政务云到本地开发机器:
git clone -b myTag https://ttt.code.aliyun.com/3333-zzzz/*****.git
2.3 云效配置
1. 【云效企业设置】-->【容器服务账号】-->【kubernetes 集群证书导入】-->【手动导入证书】
从建立的 k8s 集群获取证书信息,导入,注意:k8s 集群的 apiserver 的 公网 slb 访问控制增加云效 IP 段。
2.【云效企业设置】-->【容器服务账号】-->【docker 镜像账户管理】
绑定经常仓库的账户与密码,云效通过 docker login 登录镜像仓库来拉取镜像。
3. 应用 环境配置:
- 部署方式为 kubernetes 部署,目标集群选择集群证书导入中显示的集群,设置相应命名空间等,配置发布环境
- 建立流水线,发布应用到各租户的各个环境。
踩坑与优化:
kubernetes 的命名空间和 Service 尽量使用容器服务控制台建立或者修改为规范命名和设置,如果使用云效生成是默认的模板配置,其设置与生产环境不怎么符合。
3.镜像仓库配置
镜像仓库有条件的话,尽量采购企业版实例,企业版实例有完整的安全设置和访问控制。
只要设置有:
命名空间,设置为私有,授权给专属镜像仓库登录的阿里云子账号;
设置访问凭证(密码)
命名空间下的镜像子仓库,云效在 docker push 时会自动建立为私有的镜像仓库
企业版实例有安全扫描,安全访问控制设置等功能,配置镜像访问控制到办公区域。
4.开发环境 Kubernetes
根据需求建立1-多个 k8s 集群,k8s 集群会默认建立apiserver 的 SLB,默认名称为 K8sMasterSlbIntranet。
如果需要云效直接发布到 kubernetes 集群,需要 kubernetes 集群必须建立公网 SLB 提供给云效访问,可以设立访问控制,只允许云效的 IP 访问。