最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品。

我会把我最近3个月的使用体会分成5个部分:使用RDC的动机、PHP项目集成、JS项目集成、JAVA项目集成、Docker类项目集成这5个分支来写

因为近期RDC的迭代比较频繁,所以我的分享会比较的浅,点到为止,仅供参考,目录:

1、RDC如何耦合进我们的业务

2、如何构建一个基于Composer的PHP项目

3、如何构建一个基于NodeJS的前后端项目

4、如何构建一个基于Maven的Java项目

5、RDC + 容器服务完成持续集成

一、RDC基础操作

在开始一切之前您需要熟悉RDC的一些基础操作,创建一个项目,然后在这个项目中创建一个应用,然后让这个应用关联某个代码分支。这样基础工作就完成了,我这里不再赘述了,因为比较简单,只需要注册个阿里云账号,然后去 rdc.aliyun.com 创建/加入个企业就行了。

本文所有的体验均基于【自由模式】的应用。

值得一提的是,应用代码源目前支持的是阿里云的代码仓库,基于gitlab,地址是 code.aliyun.com,从我2年的使用经验来看,还算好用,也不收费,较为靠谱。

在创建应用时,我们需要选择对应的配置,如下图:

创建完应用后,进入【项目】–》【流水线】,找到刚才创建应用的【同名流水线】

点击流水线名称可以看到具体的流水线运行情况和对应节点,如下图:

可以看到有4个面板:构建、日常、预发、正式。

分别对应的是:构建打包、发布到日常环境、发布到预发环境、发布到正式环境。

RDC在创建应用时自动的为你生成了一个标准模板流水线,但是我们一般用不着,所以需要对流水线进行修改,去除无用的节点,添加我们自己的配置。点击界面上的【编辑流水线】按钮就可以进入修改界面。

我们先从构建开始,所以先暂时删除日常、预发、正式这3个部署节点,仅保留构建这一个节点即可。下面的配置暂时不进行调整。删除完毕后保存流水线即可,效果如下:

至此我们已经完成了基础的准备工作,下一步就开始进行代码的构建工作了。

在开始下一步工作之前,请重新git pull一下您的代码到本地,会看到一个由RDC服务自动生成的配置文件:xxx.release 这个文件相当重要,请注意,下面将会说明如何通过此文件完成个性化构建。

二、基于Maven的Java项目构建

因为java类项目一般都通过maven来维护第三方库,并且一般会通过maven来进行构建,所以在RDC构建时需要完成依赖下载及编译的相关工作。

这里需要找到我们上一章节中提到的:xxx.release 文件,xxx代表你的应用名,所以我这里看到的文件名是:ms-autotags.release

这个文件的配置规范可以参考:help.aliyun.com/document_de…

打开这个文件可以看到,已经有一些预先定义好的配置:

# 构建源码语言类型
code.language=scripts# 应用部署脚本
deploy.appctl.path=deploy.sh# Docker镜像构建之后push的仓库地址
docker.repo=registry.cn-hangzhou.aliyuncs.com/xxx/abced复制代码

上面的配置是不能用的,我们需要将其修改为如下内容:

# 语言类型,需要修改,否则无法调用对应的构建环境
code.language=java# JDK版本
baseline.jdk=jdk-1.8# 构建打包所用的maven版本
build.tools.maven=maven3.2.5#产出物
build.output=target/ms-autotags-1.0-jar-with-dependencies.jar
# 应用部署脚本,先注释掉,暂时用不上
# deploy.appctl.path=deploy.sh复制代码

↓↓↓↓ 配置说明:

code.language=java复制代码

代表使用的是java作为代码语言类型。支持以下枚举(因为RDC经常更新,请以官方为准):

php5.6,php7.0,node6.x,node7.x,node8.x,oracle-jdk1.7,oracle-jdk1.8, oracle-jdk1.9,scripts

如果有使用过jenkins的同学,那么应该比较好理解,RDC的构建是通过Docker容器技术实现的,类似于配置好环境的jenkins构建机,RDC团队针对各种语言准备了不同的镜像作为构建宿主。

build.tools.maven=maven3.2.5复制代码

使用3.2.5版本的maven。

build.output=target/ms-autotags-1.0-jar-with-dependencies.jar复制代码

指明一个产出物,可以是目录也可以是具体的文件,比如jar包或者war包。如果执行完构建后此目录、文件不存在,则代表构建失败,无法进入工作流下一环。

简单maven项目不需要设置 build.command,除非你需要设置特别的maven打包参数或有多行打包命令。

我们已经完成了应用的创建+流水线的修改,那么我们运行一次构建试一下,只需要点击【运行流水线】按钮即可,运行后等几秒刷新一下页面,效果如下:

可以看到执行时间、版本号、日志、操作人等信息。

如果构建失败了,可以通过构建流程—-日志详情面板看到具体的错误原因,有日志排查起来不太难,但是RDC的构建还是偏向黑盒,所以尽量熟练或在本地先把相关命令跑通后再上传到xxx.release文件里去进行RDC构建。

可以看到初始的版本号是:v0.0.1-1,如果你的构建一直失败,版本号会变成v0.0.1-3、v0.0.1-8、v0.0.1-18、v0.0.1-N。

如果你的流水线全流程跑完了,则会自动叠加一个小版本号变为v0.0.2-1,所以这种构建方式清晰明了,还算好用。

三、如何输出为一个Docker镜像

我们已经完成了代码的打包编译工作,下一步我们需要把完整的代码封装成一个Docker镜像,我们需要对xxx.release文件做如下改动:

# 语言类型,需要修改,否则无法调用对应的构建环境
code.language=java# JDK版本
baseline.jdk=jdk-1.8# 构建打包所用的maven版本
build.tools.maven=maven3.2.5#产出物
build.output=target/ms-autotags-1.0-jar-with-dependencies.jar# Docker 构建配置
docker.file=Dockerfile# Docker镜像构建之后push的仓库地址
docker.repo=registry.cn-hangzhou.aliyuncs.com/xxx/abceddocker.tag=ci-${PACKAGE_LABEL} # 应用部署脚本,先注释掉,暂时用不上
# deploy.appctl.path=deploy.sh复制代码

相对于单纯的构建,如果需要生成Docker镜像则需要补充几个配置项,拆解说明如下:

docker.file=Dockerfile复制代码

指明dockerfile文件的位置和文件名,默认就是根目录下的Dockerfile文件。

docker.repo=registry.cn-hangzhou.aliyuncs.com/xxx/abced复制代码

指定你的docker镜像仓库,建议使用阿里云提供的仓库,免费,速度快,可以加速docker hub的内容,无缝对接RDC服务,地址是 dev.aliyun.com ,此处的xxx对应的是你的名称空间,abced对应的是你的镜像名称。

docker.tag=ci-${PACKAGE_LABEL}-${TIMESTAMP}复制代码

这里指定你的docker镜像的tag名,使用了环境变量进行拼接。

${PACKAGE_LABEL}代表的是包名,这个参数在流水线配置里可以改,默认是default。

${TIMESTAMP}代表的是当前时间戳,格式是:20171008224350 这种样子。

有的项目一份代码可能产生多个docker镜像就需要通过这种方式来动态生成tag名,防止覆盖,也便于回滚。

关于构建传参,可以参考这个文章: help.aliyun.com/document_de…

那么此处最终生成的tag名是这样的: ci-default-20171008224350

结合仓库名和镜像名,最终会生成镜像tag地址为:

registry.cn-hangzhou.aliyuncs.com/xxx/abced:c…

四、后记

NodeJS构建 + Docker构建就说到这里,因为主要是为了介绍RDC,所以Docker部分就挑重点讲了,如何编写Dockerfile文件请自行学习。

输出成Docker镜像后,如何使用RDC部署到容器相关问题我会单独开一个文章来分享。

文章原文出处:qipangzi.com (个人博客)

云效(原RDC)如何构建一个基于Maven的Java项目相关推荐

  1. 云效(原RDC)如何构建一个基于Composer的PHP项目

    最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品. 我会把我最近3个月的使用体会分成5个 ...

  2. RDC如何构建一个基于NodeJS的前后端项目

    摘要: 最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品. 我会把我最近3个月的使用体会 ...

  3. 如何创建一个基于Maven的SmartGWT项目

    如何创建一个基于Maven的SmartGWT项目 使用环境 Eclipse的版本为:Luna Service Release 2 (4.4.2)(这个其实不是很重要,你完全可以使用最新版本的Eclip ...

  4. 云效平台性能测试功能:一个基于Jmeter的性能压测平台

    云效平台性能测试功能(Galaxy)是一个基于Jmeter的性能压测平台,它集脚本.场景.压测.监控和报表展示为一体,是一个能快速.低成本实施压测的平台.降低了入门使用成本,让开发和测试都可以方便的执 ...

  5. 怎么从头开始构建一个基于web浏览器的云游戏平台--前言——带目录

    怎么从头开始构建一个基于web浏览器的云游戏平台–前言 今天开一个新坑,公司突然开始涉及云游戏,还要基于web端,区别于现有的大多数云游戏平台,有点类似于在国内搞一个谷歌云游戏的模式,自己本身对云游戏 ...

  6. 基于云效Flow落地自动化构建——构建集群

    基于云效Flow落地自动化构建,构建集群,云效流水线Flow是持续交付的载体,通过构建自动化.集成自动化.验证自动化.部署自动化,完成从开发到上线过程的持续交付.通过持续向团队提供及时反馈,让交付过程 ...

  7. Ubuntu下使用Eclipse编译一个基于makefile的C项目

    [背景] 折腾完: [记录]Ubuntu中下载和安装Eclipse 后,就可以去折腾,用Eclipse编译项目了. [折腾过程] 1.继续正常的导入项目: 2. 3. 4.但是只检测出来一个子项目WH ...

  8. 基于SpringBoot监控Java项目,暴漏springboot内置端点

    基于SpringBoot监控Java项目的指标 文章目录 基于SpringBoot监控Java项目的指标 监控java项目有哪些方案 springboot内置端口 prometheus 如何使用 sp ...

  9. 基于SSM的Java项目——健身房管理系统

    健康是责任,健身是任务.当前,随着生活水平的提升,人们越来越注重追求健康生活,愿意花更多时间投入健身活动,主动健身.科学健身日益成为越来越多人的自觉选择. 因此健身房也成为大家的一个主流选择,越来越多 ...

最新文章

  1. 有关任意多条曲线的拟合度算法
  2. C/C++实现图的广度和深度遍历
  3. AutoScaling 生命周期挂钩功能
  4. docker 必然用到的一些指令
  5. Theory Defect in selecting best pruned tree from CCP with Cross-validation
  6. getLocationOnScreen不起作用原因
  7. Java集合---面试题
  8. toadstool sql格式化
  9. 2008不可错过的好莱坞电影
  10. windows下openresty环境配置
  11. MVC3的新特性介绍
  12. NOIP 2017 PJ
  13. linux c 键盘钩子,利用键盘钩子在Windows平台下捕获键盘动作 (转)
  14. MYSQL闪退的解决方法
  15. 脉冲神经网络 神经元模型-Izhikevich模型(3)
  16. 思科路由器及交换机基本配置
  17. 专注网格剖分 - TetGen,NETGEN,Steller
  18. 数据库系统原理(1)--绪论
  19. 怎么用万用表检测场效应管的好坏?
  20. 航信软件里面的虚拟服务器,航天信息网络应用平台

热门文章

  1. VMware vSphere 5.0升级到5.1的思路
  2. 程序员的比较工具大杂烩
  3. 超越对手之四、五、六
  4. 利用jsoncpp将json字符串转换为Vector
  5. 使用MapReduce实现join操作
  6. eclipse中 properties文件编码问题
  7. python 脚本查看微信把你删除的好友--win系统版
  8. C++ 虚函数在基类与派生类对象间的表现及其分析
  9. [转]计算机存在两个管理员,删除其中一个,administration隐藏显示
  10. 邮件服务器SASL TLS 反垃圾邮件系统