前言

前不久登录阿里云后台,看到云效的介绍,出于好奇便点进去看了看,刚开始以为云效是类似Jenkins的一套自动化部署方案,了解之后发现云效的野心很大哦,从需求管理、业务开发、代码管理、缺陷测试、部署上线全方位掌控,试图提供一站式DevOps平台,将原先零散的管理平台整合成一个掌管项目全生命周期的综合性管理平台,想法倒是蛮好的,目前东一个平台,西一个平台切换来切换去也颇有点麻烦,能整合起来还是要点赞的,另外目前也是免费使用,那就尝试下吧。

实战

在阿里云后台点击云效后会有二个云效,一个叫“云效”,一个叫“云效2020”,本文主要介绍云效2020,以下简称云效。云效涉及功能较多,本章节以自动化部署展开说明。



涉及云效中制品仓库,代码管理,流水线三大功能,示例已原有项目接入展开说明。

制品仓库

制品仓库其实就是Maven仓库,云效已为每个企业提供一个maven私库,省去自己搭建maven私库。

maven配置

点击进入云效中的制品仓库后,会看到如下图界面



点击任意仓库地址后,会跳转至maven配置指南,详细说明该如何配置,这点做得蛮友好的



如果原先本地对maven配置项没有调整过的话,直接按照制品仓库说明文档中的方式一直接下载覆盖本地文件即可。相信大多数应该都不是默认配置,那就按照方式二说明进行调整即可。

首先将仓库凭证信息复制至本地maven配置项中servers节点,如下图,可以发现凭证信息都是成对出现的,我这边添加了3组凭证配置项



其次将仓库地址信息复制至本地maven配置项中profiles节点下的repositories节点,如下图

项目pom配置

本地maven配置项调整好后,我们需在项目中根目录下的pom.xml增加相应配置,找到根节点pom.xml文件后,将云效中制品上传配置复制过来即可,如下图



另外也需将制品仓库中的settings.xml,复制项目根目录下,该文件在后续构建过程中需使用,如下图



到这里涉及maven的调整已经完成,有个注意点这边配置项中的id属性值需上下一一对应,且不可重复

代码管理

云效中目前支持的代码源如下图



如果原先项目已采用上述代码源中的一种并且支持公网访问的话,那恭喜你可直接跳过该步骤,直接进入流水线配置。如果项目未采用上述代码源管理的话,那就赶紧选择一项,这边推荐使用云效Codeup,毕竟是已整合在云效中。关于Git的配置及使用本文不做介绍,可自行百度即可。

流水线

点击云效中的流水线模块,进入流水线管理页面,如下图



点击新建流水线后,选择Java最基础的构建模板



之后进入流程配置页,如下图



第一步:选择项目源,在项目源选择好上一步配置好的代码源即可。

第二步:配置构建参数,在这步需进行二项操作,Java构建参数配置及构建物上传配置,如下图



在Java构建中选择项目运行的Java版本,我这边项目是基于jdk1.8开发,所以也选择jdk1.8。

在构建命令中可根据自己项目实际情况,更改构建命令,我这边使用如下命令

mvn -B clean package -Dmaven.test.skip=true -Dautoconfig.skip -s settings.xml -P pro
命令参数 说明
-s 用户maven配置文件的路径
-P maven会激活项目中pom.xml配置的profiles标签,如项目中有用到环境配置则需添加该配置



构建物上传这边需在打包路径进行设置,根据项目情况进行调整,我这边项目最终输出为一个war包,则配置好构建后的路径。这边打包路径为当前构建产生的构建产物在当前工作区下的相对路径。如"target/"

第三步:主机部署配置,如下图



在制品选项栏中点击下拉选择会自动选中选项,目前该选项不可自行配置,选择默认的即可。

在主机组选项中对于首次使用流水线的,需新建主机组,目前支持阿里云ECS及自有主机(只要能通过外网访问都支持),如下图



我这边已经配置过阿里云ECS,这边就不重复操作了,选择相应的主机组即可,大家可根据自身实际情况添加主机。

在下载路径配置中选择存放上一步构建物构建后上传至该服务器的文件路径,我这边选择默认配置。

在执行用户中选择部署脚本执行用户,我这边是root用户。

在部署脚本中主要做的任务就是将上传至该服务器的构建物进行解压,然后根据项目部署方式进行部署。我这边主要做了如下操作:

1.将构建物进行解压,解压出的war包保存至指定目录

tar zxvf /home/admin/app/package.tgz -C /home/admin/fms/

2.执行部署脚本

sh /home/admin/deploy.sh restart

3.在命令中先执行tomcat停止命令

stop_application() {
echo "stoping java process"
service tomcat stop
echo "stoped java process"
}

4.将原先项目老版本进行备份,备份后删除老版本,将新版本解压至tomcat运行目录

start_init() {
# 创建项目备份路径
mkdir -p ${TOMCAT_HOME}/bf/${SERVICE_DAY_STR2}/
cp -r ${TOMCAT_APP_HOME} ${TOMCAT_HOME}/bf/${SERVICE_DAY_STR2}/
rm -rf ${TOMCAT_APP_HOME}*
#cp -r ${APP_HOME} /opt/tomcat8/webapps/
unzip ${WAR_NAME} -d ${TOMCAT_APP_HOME}
}

5.执行tomcat启动命令

start_application() {
echo "starting java process"
#nohup java -jar ${JAR_NAME} > ${JAVA_OUT} 2>&1 &
service tomcat start
echo "started java process"
}

根据云效给的部署脚本示例,结合自身项目实际部署情况进行调整,完整部署脚本如下

官方部署实例脚本

https://thoughts.aliyun.com/sharespace/5e86a419546fd9001aee81f2/docs/5e86a416546fd9001aee81b9

#APP_NAME为云效上的应用名
APP_NAME=fms PROG_NAME=$0
ACTION=$1
APP_START_TIMEOUT=20 # 等待应用启动的时间
APP_PORT=8080 # 应用端口
HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT} # 应用健康检查URL
APP_HOME=/home/admin/${APP_NAME} # 从package.tgz中解压出来的jar包放到这个目录下
WAR_NAME=${APP_HOME}/${APP_NAME}.war # jar包的名字
JAVA_OUT=${APP_HOME}/logs/start.log #应用的启动日志
TOMCAT_HOME=/opt/tomcat8
TOMCAT_APP_HOME=${TOMCAT_HOME}/webapps/fms/
SERVICE_DAY_STR=`date --date='0 days ago' +%Y-%m-%d`
SERVICE_DAY_STR2=`date --date='0 days ago' +%Y%m%d%H%M%S`
# 创建出相关目录
mkdir -p ${APP_HOME}
mkdir -p ${APP_HOME}/logs
usage() {
echo "Usage: $PROG_NAME {start|stop|restart}"
exit 2
} health_check() {
exptime=0
echo "checking ${HEALTH_CHECK_URL}"
while true
do
status_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code} ${HEALTH_CHECK_URL}`
if [ "$?" != "0" ]; then
echo -n -e "\rapplication not started"
else
echo "code is $status_code"
if [ "$status_code" == "200" ];then
break
fi
fi
sleep 1
((exptime++)) echo -e "\rWait app to pass health check: $exptime..." if [ $exptime -gt ${APP_START_TIMEOUT} ]; then
echo 'app start failed'
exit 1
fi
done
echo "check ${HEALTH_CHECK_URL} success"
}
start_application() {
echo "starting java process"
#nohup java -jar ${JAR_NAME} > ${JAVA_OUT} 2>&1 &
service tomcat start
echo "started java process"
} stop_application() {
echo "stoping java process"
service tomcat stop
echo "stoped java process"
}
start_init() {
# 创建项目备份路径
mkdir -p ${TOMCAT_HOME}/bf/${SERVICE_DAY_STR2}/
cp -r ${TOMCAT_APP_HOME} ${TOMCAT_HOME}/bf/${SERVICE_DAY_STR2}/
rm -rf ${TOMCAT_APP_HOME}*
#cp -r ${APP_HOME} /opt/tomcat8/webapps/
unzip ${WAR_NAME} -d ${TOMCAT_APP_HOME}
}
start() {
start_init
start_application
health_check
}
stop() {
stop_application
}
case "$ACTION" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
usage
;;
esac

流程配置完后还有二项配置,触发设置和变量和缓存配置,这二项配置是最近出来的,原先是没有的(阿里的迭代还是蛮快的)我这边主要说明部署过程,如有需要可自行体验,点击保存即可完成流水线的配置工作。

配置完后点击配置的流水线,点击运行即可体验自动化部署下带来的便捷了,部署过程中可时刻关注日志输出,便于刚开始部署调试,后续就一劳永逸了。

参考资料

https://thoughts.aliyun.com/sharespace/5e86a419546fd9001aee81f2/docs/5e86a414546fd9001aee8195


CI/CD系列之阿里云云效2020应用篇的更多相关文章

  1. CI/CD系列

    一.CI/CD系列 什么是CI/CD(译) Docker与CI/CD(转) Docker和CI/CD实战 二.Git 三.GitLab

  2. 【TFS 2017 CI/CD系列 - 03】-- Release篇

    为Project创建Release必须要先创建Build,若还没有Build definition请看上一篇文章:[TFS 2017 CI/CD系列 - 02]-- Build篇 一.创建Releas ...

  3. ASP.Net Core2.1 秒杀项目一步一步实现CI/CD系列一

    前言:有一段时间没写博客了,那是因为博主菜,需要学习和准备,这不带来了本系列的文章.在这里我把学习的心得分享出来,有些点理解的也不是太到位,希望大佬们能多多给点建议和指导.下半年就把这个系列的文章写完 ...

  4. 【TFS 2017 CI/CD系列 - 02】-- Build篇

    .创建Build 登录TFS,在现有的[Projects]中选择一个需要要创建Build的Project,点击[Build & Release]跳转页面 在新页面中选择[Builds]选项卡, ...

  5. 【TFS 2017 CI/CD系列 - 01】-- Agent篇

    一.环境要求: PowerShell 3.0 或者更高版本 VS2015或者更高版本 二.下载Agent: 用浏览器打开TFS,[Settings]--> [Agent Pools]--> ...

  6. 超简单让.NET Core开发者快速拥有CI/CD的能力-Docker版本

    超简单让.NET Core开发者快速拥有CI/CD的能力-Docker版本 前言 上一篇自动化测试,全面且详细的介绍了从零开始到发布版本的步骤,这是传统的方式,本次为大家带来的是如何在5分钟内使用上d ...

  7. 阿里CI/CD、DevOps、分层自动化技术

    原文地址:http://www.infoq.com/cn/news/2017/01/alibaba-yunxiao-cicd-devops 在互联网时代,产品快速迭代的重要性不言而喻.不管是传统企业还 ...

  8. .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7.2)系列一:k8s高可用集群搭建总结以及部署API到k8s

    前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署的,这个集群差不多搞了一周时间,关于k8s的知识点,我也是刚入门,这方面的知识建议参考博客园 ...

  9. .Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker

    之前写过使用Jenkins实现自动化部署,最近正好没事研究了下GitLab的自动化部署,顺便记录一下. 使用GitLab部署我们需要准备两件事,第一个起码你得有个GitLab,自己搭建或者使用官方的都 ...

随机推荐

  1. Java中设置多个Access-Control-Allow-Origin跨域访问

    1.如果服务端是Java开发的,添加如下设置允许跨域即可,但是这样做是允许所有域名都可以访问,不够安全. response.setHeader("Access-Control-Allow-O ...

  2. trollcave解题

    这是第一次完整地进行模拟渗透,前前后后一共花了一天时间,花了点时间写了个writeup. 博主是个菜鸡,如果有大神看到,请轻喷...... writeup下载:https://hrbeueducn-m ...

  3. 实时web应用方案——SignalR(.net core)

    何为实时 先从理论上解释一下两者的区别. 大多数传统的web应用是这样的:客户端发起http请求到服务端,服务端返回对应的结果.像这样: 也就是说,传统的web应用都是客户端主动发起请求到服务端. 那 ...

  4. web之robots.txt

    什么是roots协议 robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被 ...

  5. 写给程序员的机器学习入门 (七) - 双向递归模型 (BRNN) - 根据上下文补全单词

    这一篇将会介绍什么是双向递归模型和如何使用双向递归模型实现根据上下文补全句子中的单词. 双向递归模型 到这里为止我们看到的例子都是按原有顺序把输入传给递归模型的,例如传递第一天股价会返回根据第一天股价 ...

  6. autocomplete 之 ASP.NET

    <link href="CSS/jquery.autocomplete.css" rel="stylesheet" type="text/css ...

  7. 基于小程序请求接口 wx.request 封装的类 axios 请求

    基于小程序请求接口 wx.request 封装的类 axios 请求 Introduction wx.request 的配置.axios 的调用方式 源码戳我 feature 支持 wx.reques ...

  8. 分析并封装排序算法(js,java)

    前言 本次来分享一下排序的api底层的逻辑,这次用js模拟,java的逻辑也是差不多. 先看封装好的api例子: js的sort排序 java的compareTo排序 自己模拟的代码(JS) func ...

  9. 2020阿里巴巴官方最新Redis开发规范!

    本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明. 键值设计 命令使用 客户端使用 相关工具 通过本文的介绍可以减少使用Redis过程带来的问题. 一.键值设计 1.key名设计 ...

  10. directive 实例讲解

    http://my.oschina.net/ilivebox/blog/289670 gulp-nodemon http://www.zhihu.com/question/32123388?sort= ...