背景
持续交付的我们常见的流程如下,其中有一个环节就是软件包管理
今天我们以maven仓库为示例,如下是Jenkins与CD生态:
持续交付的示例
5 Principles 五个原则
- Deliver fast
- Automate almost everything
- Keep everything in version control
- Build quality In
- Empower the team
NEXUS介绍
Nexus为软件组件管理工具,通过软件开发周期的自动化管理,可以有效管理与控制组件,让管理更加智能化。目前为二进制包管理仓库行业佼佼者,该产品一大特色是可以得到开源组件的详细信息,如安全漏洞、License使用和质量信息。总之,加快软件创新、质量和安全。使用Nexus可以带来以下的便利:
1 通过自动化管理,可以减少运维成本
2 提升构建性能,减少人工操作失误
3 通过UI页面在线操作,实现可视化控制
4 定义过滤组件的策略,提升对组件的审查力度
5 隔离有危害的组件,减少安全隐患
Nexus由三部分组成:Nexus Repository、Nexus Firewall和Nexus Lifecycle。
Nexus Repository
充当仓库角色,负责整个Nexus产品的运行,可以存储从开发环境部署的组件,及保存从远程公共仓库下载到本地的组件。
Nexus Firewall
保护Nexus Repository安全运行,阻止有危害的组件进入,并且可以隔离它们不进入仓库。
Nexus Lifecycle
组件的软件开发周期过程管理,通过与Eclipse、Jenkins、Hudson、Bamboo、IDEA开发工具集成插件,查看组件的基本运行信息。在软件开发周期每一个阶段,通过制定策略自动化过滤不想要的组件进入Nexus Repository。提供一组REST APIs,允许客户开发定制化功能。
下载链接为 https://www.sonatype.com/download-oss-sonatype。安装和使用请参考其官方文档。
Docker安装
Docker 修改源
默认进行docker pull命令下载一些基础镜像时,是从国外源下载的,经常会网络超时失败,这时可以添加配置国内源,以便快速的进行下载;
修改 /etc/docker/daemon.json 文件中的”registry-mirrors”配置项
"registry-mirrors": [https://registry.docker-cn.com]
搭建Nexus服务
1 . 镜像下载
docker pull sonatype/nexus3
2 . 使用nexus镜像启动容器服务
docker run -d -p 8081:8081 --name nexus -v /data/nexus:/nexus-data sonatype/nexus3
3 . 访问nexus, 进行服务初始化 , 默认管理用户 [admin:admin123]
构建云端的Maven私有仓库
目前方案有:
1.阿里云 -- 云效的企业级Maven私有仓库服务
当用户开通了Maven私有仓库服务后,云效会为用户生成两个私有仓库,一个用于存放release版本的二方库,一个用于存储SNAPSHOT版本的二方库。
release仓库地址示例:
https://repo.rdc.aliyun.com/repository/24409-release-87w1FL/
SNAPSHOT仓库地址示例:
https://repo.rdc.aliyun.com/repository/24409-snapshot-AA0Hx0/
云效构建时从私有仓库下载二方库
如果用户项目代码库的根目录没有Maven的settings.xml文件,那么云效构建时会为用户自动生成一个settings.xml文件。该文件不仅包括了maven.aliyun.com等公共仓库地址,也自动引入了该企业的两个私有仓库地址。所以用户通过云效构建时,无需任何额外配置就可以实现下载私有仓库中的二方库。
如果用户项目代码库的根目录定制了Maven的settings.xml文件,那么用户需要自行将私有仓库的配置信息添加到该文件中。具体可以参考Maven私有仓库服务。
通过云效上传二方库到私有仓库
如果想通过流水线发布二方库到私有仓库,可以先在项目代码库根目录的pom.xml中指定分发的仓库地址,示例如下:
<distributionManagement>
<repository>
<id>releases</id>
<url>http://repo.rdc.aliyun.com/repository/24409-release-87w1FL/</url>
</repository>
</distributionManagement>
项目代码库根目录的<应用名>.release
中指定构建命令为上传二方库,例如:
build.command=mvn clean deploy -Dmaven.test.skip
更多参考:
https://help.aliyun.com/document_detail/72474.html?spm=a2c4g.11186623.2.3.JDs8ca
https://helpcdn.aliyun.com/document_detail/57890.html
2. 华为云 -- Maven私有仓库
- 登录发布服务首页。
- 获取Maven仓库用户名及密码。
在发布服务首页右上角单击“获取密码”,如图1所示。
说明:
只有租户管理员才可以看见“权限管理”。
下载成功后,所有用户密码信息(包括Group用户、Releases用户和Snapshots用户)显示在XML文件中,如图2所示。
说明:
- 仓库地址中的域名,请修改为“devrepo.devcloud.hwclouds.com”。
- 用户名密码仅为样例,为方便描述,用户名与密码均以“123”为例,请以实际下载为准。
- 配置Maven的“settings.xml”文件。
“settings.xml”文件用于配置Server(连接远程仓库时的验证方式)与Mirror(远程仓库镜像)。
说明:
- “settings.xml”文件位于本地目录“$MAVEN/conf”下,如“D:\maven3.3.9\conf”。
- 如果只需要使用公共库,可以直接将“mirror仓库”里的仓库地址复制到“settings.xml”中的mirrors里,servers里的用户名和密码默认为仓库名(如:jcenter仓的用户名和密码都为jcenter)。
- 配置Server连接远程仓库时的验证方式。
在“settings.xml”文件中配置访问仓库需要的用户名和密码,包括Group用户、Releases用户与Snapshots用户,如图3所示。
说明:
各用户名及密码分别对应步骤步骤2中XML文件的“username”与“password”。
- 配置Mirror远程仓库镜像。
在“settings.xml”文件中配置远程仓库镜像涉及的仓库URL、仓库访问用户名和密码,即在<mirrors>节点中增加需要的仓库镜像,如图4所示。
说明:
“url”为步骤步骤2中Group用户获取的仓库地址。
- 配置项目POM文件。
在Maven的“pom.xml”工程文件中,配置项目POM,即构建上传包,如图5所示。
说明:
- 仓库路径中Releases用户与Snapshots用户获取的仓库地址“url”请直接在发布首页“Maven仓库(Release)” 和“Maven仓库(Snapshot)” 页签中分别进行复制。
- 上传本地IDE工具构建包时才需要配置POM文件。
参考:
https://devcloud.huaweicloud.com/releaseman/repository/maven
https://support.huaweicloud.com/usermanual-releaseman/releaseman_hlp_00004.html
3. 微软 -- Visual Studio Team Services(VSTS)
A feed is a container for packages. You consume and publish packages through a particular feed.
Navigate to the Packages hub in the Build & Release hub group:
Click the dropdown in the top left and select New feed:
In the dialog:
- Give the feed a name.
- Choose who can read and contribute (or update) packages in your feed.
- Choose the upstream sources for your feed.
- When you're done, choose Create.
Most of the default settings work great for most feed users. Making your feed account visible means it's easy to share a single source of packages across your entire team. Enabling upstream sources to public sources makes it easy to use your favorite OSS packages, and can also give you additional protection against outages and corrupted or compromised packages.
You can change these settings later by editing the feed.
Set up authentication
To talk to VSTS feeds, you'll need a token on your local machine that Maven can pick up and pass to VSTS.
Navigate to the feed that you'd like to use and select Connect to feed.
Open the Maven tab, choose Generate Maven credentials, and copy the generated credentials. (images below)
Maven pulls credentials from your settings.xml file.
On Linux, the file path is usually
"${user.home}/.m2/settings.xml"
On macOS, the file path is usually
"~/.m2/settings.xml"
On Windows, the file path is usually
"%USERPROFILE%/.m2/settings.xml"
If the file doesn't exist, create one now.
Inside the
<settings>
and<servers>
elements in the file, paste the credentials you copied in Step 3 above.
Sample settings.xml:
XMLCopy
<settings>
<servers>
<!-- Copy this section from the Maven section of the "Connect to Feed" dialog" -->
<server>
<id>yourAccount-visualstudio.com-yourFeedName</id>
<configuration>
<httpHeaders>
<property>
<name>Authorization</name>
<!--The generated token expires on or before 7/19/2017-->
<value>Basic Y2Fqb...</value>
</property>
</httpHeaders>
</configuration>
</server>
</servers>
</settings>
NOTE: You can find more information about the settings.xml file in the settings.xml reference.
参考:
https://docs.microsoft.com/en-us/vsts/package/maven/pom-and-settings?view=vsts
https://docs.microsoft.com/en-us/vsts/pipelines/apps/java/build-maven?view=vsts&tabs=vsts
目前情况下 各个云端服务的对比:
1. 文档: 阿里云的云效的文档更为正式,华为云的文档还在论坛中,不完整, 微软VSTS官方文档详细。
2. 流水线: 阿里云,华为云,微软VSTS的私有仓库都与其研发平台流程线打通了。
3. 价格: 目前都没有收费,对于小型开发团队还是比较适合的。微软VSTS限制5个开发人员账号
4. 速度:阿里云,华为云较快,微软VSTS较慢
-----------------------------------------------------------------------------
今天先到这儿,希望对您技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管理,团队建设 有参考作用 , 您可能感兴趣的文章:
领导人怎样带领好团队
构建创业公司突击小团队
国际化环境下系统架构演化
微服务架构设计
视频直播平台的系统架构演化
微服务与Docker介绍
Docker与CI持续集成/CD
互联网电商购物车架构演变案例
互联网业务场景下消息队列架构
互联网高效研发团队管理演进之一
消息系统架构设计演进
互联网电商搜索架构演化之一
企业信息化与软件工程的迷思
企业项目化管理介绍
软件项目成功之要素
人际沟通风格介绍一
精益IT组织与分享式领导
学习型组织与企业
企业创新文化与等级观念
组织目标与个人目标
初创公司人才招聘与管理
人才公司环境与企业文化
企业文化、团队文化与知识共享
高效能的团队建设
项目管理沟通计划
构建高效的研发与自动化运维
某大型电商云平台实践
互联网数据库架构设计思路
IT基础架构规划方案一(网络系统规划)
餐饮行业解决方案之客户分析流程
餐饮行业解决方案之采购战略制定与实施流程
餐饮行业解决方案之业务设计流程
供应链需求调研CheckList
企业应用之性能实时度量系统演变
如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。