持续交付之软件包管理maven篇
背景
持续交付的我们常见的流程如下,其中有一个环节就是软件包管理
今天我们以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所示。
图1 获取密码
说明:
只有租户管理员才可以看见“权限管理”。
下载成功后,所有用户密码信息(包括Group用户、Releases用户和Snapshots用户)显示在XML文件中,如图2所示。
图2 XML文件用户密码信息
说明:
- 仓库地址中的域名,请修改为“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所示。
图3 Server配置
说明:
各用户名及密码分别对应步骤步骤2中XML文件的“username”与“password”。
- 配置Mirror远程仓库镜像。
在“settings.xml”文件中配置远程仓库镜像涉及的仓库URL、仓库访问用户名和密码,即在<mirrors>节点中增加需要的仓库镜像,如图4所示。
图4 Mirror配置
说明:
“url”为步骤步骤2中Group用户获取的仓库地址。
- 配置项目POM文件。
在Maven的“pom.xml”工程文件中,配置项目POM,即构建上传包,如图5所示。
图5 项目POM配置
说明:
- 仓库路径中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。
持续交付之软件包管理maven篇的更多相关文章
- 持续交付的Mesos与Docker导入篇
变革这个词在当今的数字化时代司空见惯,IT技术每过一段时间就会有一起革新,从WEB2.0.虚拟化.云计算.大数据.微架构.DevOps再到今天的容器Docker与Mesos. Docker的出现方便了 ...
- [持续交付实践] pipeline使用:Multibranch Pipeline
前言 在探讨multiBranch Pipeline之前,很有必要先探讨下如何制定有效的代码分支管理规范,使用高效的版本控制系统,并对构建产物及其依赖进行管理.我们首先要强调,需要进行版本控制的不仅是 ...
- 人多力量大vs.两个披萨原则,聊聊持续交付中的流水线模式
人多力量大vs.两个披萨原则,聊聊持续交付中的流水线模式 在前面5期文章中,我们分别详细介绍了持续交付体系基础层面的建设,主要是多环境和配置管理,这些是持续交付自动化体系的基础,是跟我们实际的业务场景 ...
- [置顶]
Docker学习总结(7)——云端基于Docker的微服务与持续交付实践
本文根据[2016 全球运维大会•深圳站]现场演讲嘉宾分享内容整理而成 讲师简介 易立 毕业于北京大学,获得学士学位和硕士学位:目前负责阿里云容器技术相关的产品的研发工作. 加入阿里之前,曾在IBM中 ...
- 测试需要了解的技术之基础篇三__持续集成持续交付DevOps
持续集成.持续交付.DevOps 1.容器技术Docker:容器技术介绍.Docker安装与加速配置.Docker基础命令.Docker搭建selenium.Docker搭建持续集成平台Jenkins ...
- 软件包管理 之 Fedora/Redhat 在线安装更新软件包,yum 篇 ── 给新手指南
在本文中,我们主要解介绍 Fedora core 4.0 通过软件包管理工具yum来在线安装更新软件:关于apt工具应用,我们会在另外一篇中介绍: 一. yum 的使用:有些初学Linux的弟兄可能问 ...
- Linux学习篇(二)-软件包管理器、Yum 软件仓库
红帽软件包管理器 在红帽软件包管理器(rpm)公布之前,Linux 系统软件的安装只能采取"源码包"的方式安装,需要自行编译源码并解决许多依赖关系,所以软件的安装.升级.卸载的难度 ...
- Jenkins自动化部署-----持续交付【转】
感谢之前带领过我的leader,让我能够知道什么是好的开发方法. 在很早之前就接触过敏捷开发.什么是敏捷开发,简单来说就是让软件可靠地,快速地发布出来的一种开发方法和技巧. 而敏捷开发中有许多的实践, ...
- [持续交付实践] Jenkins Pipeline 高可用设计方法
前言 这篇写好一段时间了,一直也没发布上来,今天稍微整理下了交下作业,部分内容偷懒引用了一些别人的内容.使用Jenkins做持续集成/持续交付,当业务达到一定规模的时候,Jenkins本身就很容易成为 ...
随机推荐
- C++的代理类
怎样在一个容器中包含类型不同,但是彼此有关系的对象?众所周知,C++的容器只能存放类型相同的元素,所以直接在一个容器中存储不同类型的对象本身是不可能的,只能通过以下两种方案实现: 1. 提供一个间接层 ...
- Spring工厂方法(factory-bean)配置bean
在spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean. 在第一种利用bean config file(spring xml)方式中 ...
- SpringBoot(二)_项目属性配置
修改端口 在main/resources/application.properties修改端口 server.port=8088 此时启动访问localhost:8088/hello 就会看到 Hel ...
- eShopOnContainers 知多少[7]:Basket microservice
引言 Basket microservice(购物车微服务)主要用于处理购物车的业务逻辑,包括: 购物车商品的CRUD 订阅商品价格更新事件,进行购物车商品同步处理 购物车结算事件发布 订阅订单成功创 ...
- ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE
前言 这是一篇纯技术干货的分享文章,FreeSql 已经基本完成 .NETCore 最方便的 ORM 使命,我们正在筹备生态的建立,比如 ABP 中如何使用 FreeSql 的实现,需要各种各样的扩展 ...
- Asp.NetCore轻松学-部署到 Linux 进行托管
前言 上一篇文章介绍了如何将开发好的 Asp.Net Core 应用程序部署到 IIS,且学习了进程内托管和进程外托管的区别:接下来就要说说应用 Asp.Net Core 的特性(跨平台),将 .Ne ...
- CSharpGL(49)试水OpenGL软实现
CSharpGL(49)试水OpenGL软实现 CSharpGL迎来了第49篇.本篇内容是用C#编写一个OpenGL的软实现.暂且将其命名为SoftGL. 目前已经实现了由Vertex Shader和 ...
- 设计模式 | 外观模式/门面模式(facade)
定义: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 结构:(书中图,侵删) 一个简洁易用的外观类 一个复杂的子系统 实例: 书中提到了理 ...
- jqGrid 常用 总结 -2
这次的总结是针对于一次bug,先说下我们遇到的问题,就是后台人员告诉我们添加数据到100条数据的时候,101条就看不到,当时我觉得就是没有分页的原因,所以我就以为在jqgrid中设置一个loadonc ...
- 解决Error:All flavors must now belong to a named flavor dimension. Learn more at...
低版本的gradle里面不会出现这个错误,高版本出现,不多说,看如何解决 在defaultConfig{}中添加:flavorDimensions "default" 保证所有的f ...