ci/cd系列之阿里云云效2020应用篇(代码片段)

chinawu chinawu     2022-12-08     242

关键词:

前言

前不久登录阿里云后台,看到云效的介绍,出于好奇便点进去看了看,刚开始以为云效是类似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 "
application not started"
            else
                echo "code is $status_code"
                if [ "$status_code" == "200" ];then
                    break
                fi
            fi
            sleep 1
            ((exptime++))

            echo -e "
Wait 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

技术图片










































项目版本管理的最佳实践:云效飞流flow篇

简介:飞流Flow的最佳实践(使用阿里云云效)为了更好地使用飞流Flow,接下来将结合阿里云云效来讲解飞流Flow的最佳实践目录一、分支规约二、版本号规约2.1主版本号(首位版本号)2.2次版本号(迭代号)2.3小版本号三、云效... 查看详情

「前端ci/cd系列」第二篇:如何用建木ci更新七牛云cdn证书(代码片段)

上一次已经分享了如何利用建木CI快速地将文件上传到七牛云存储库,有的小伙伴表示还不够刺激并且还发现生成的资源外链全是七牛家的域名,说这样显得太low啦!可不可以把链接改成自己的域名呢?答案是肯定可以的。建木C... 查看详情

工程效能ci/cd之流水线引擎的建设实践(代码片段)

总第522篇2022年第039篇经过近3年的建设打磨,美团流水线引擎完成了服务端的基建统一,每日支撑近十万次的流水线执行量,系统成功率保持在99.99%以上。本文主要介绍美团在自研引擎建设层面遇到的挑战以及解决方... 查看详情

ci/cd之jenkins(代码片段)

...线插件安装gitlab插件jenkins和gitlab联动jenkins轮询检查gitlab代码变更使用webhook实时检查gitlab代码变更推送dockerfile文件自动构建镜像新增agent节点jenkins用户管理CI/CD简介CI(Continuousintegration持续集 查看详情

ci/cd之jenkins(代码片段)

...线插件安装gitlab插件jenkins和gitlab联动jenkins轮询检查gitlab代码变更使用webhook实时检查gitlab代码变更推送dockerfile文件自动构建镜像新增agent节点jenkins用户管理CI/CD简介CI(Continuousintegration持续集 查看详情

serverless架构下的ai应用开发(代码片段)

作者:阿里云云原生本篇内容连载自《Serverless架构下的AI应用开发:入门、实战与性能优化》。Serverless架构与CI/CD工具的结合CI/CD是一种通过在应用开发阶段引入自动化流程以频繁向客户交付应用的方法。如图所示,C... 查看详情

ci/cd技术专题「jenkins实战系列」总结归纳jenkins的安装使用和配置流程介绍(代码片段)

Jenkins基础介绍篇Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。通过Jenkins实现自动化部署项目,... 查看详情

阿里云云效流水线自动化部署ruoyi-cloud微服务架构(代码片段)

前言本文章基于ruoyi-cloud项目改编。阿里云云效工作台点击进入,主要使用到代码管理及流水线模块。主机配置:CentOS7.9.2009x86_64环境配置:安装docker、docker-compose#安装docker使用daocloud的一键安装脚本curl-sSLhttps://get.daoc... 查看详情

ci与cd之docker上安装jenkins(代码片段)

...与主干脱离,导致分支与主干可能存在较大偏差,在集成代码的时候可能需要花费数小时更久的时间来修复代码,以便最终将代码集成主干(俗称"集成地狱"或"集成灾难");而CI旨在鼓励团队成员进行频繁集成(例如每小时或至少... 查看详情

tfs2017ci/cd系列-01--agent篇

一、环境要求:  PowerShell3.0或者更高版本  VS2015或者更高版本二、下载Agent:  用浏览器打开TFS,【Settings】-->【AgentPools】-->【DownloadAgent】    安装系统版本下载对应的Agent包,这里以WindowsX64系统为例:把下载... 查看详情

ci/cd之搭建私有git仓库gitlab(代码片段)

...tLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。安装方法是参考GitLab在GitHub上的Wiki页面。Gitlab官方文档:https://docs.gitlab.com/CI/CD持续集成考虑一个应 查看详情

ci/cd之搭建私有git仓库gitlab(代码片段)

...tLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。安装方法是参考GitLab在GitHub上的Wiki页面。Gitlab官方文档:https://docs.gitlab.com/CI/CD持续集成考虑一个应 查看详情

为了实现ci/cd,先来定制一个docker镜像实战精华篇(代码片段)

背景计划把手头的项目逐步改造为基于Docker容器的方式发布,同时,项目中已经采用了云厂商提供的CI/CD自动化发布流水线。因此,为配合CI/CD操作,需要先针对项目构建一些发布的脚本,通过脚本来自动化操... 查看详情

为了实现ci/cd,先来定制一个docker镜像实战精华篇(代码片段)

背景计划把手头的项目逐步改造为基于Docker容器的方式发布,同时,项目中已经采用了云厂商提供的CI/CD自动化发布流水线。因此,为配合CI/CD操作,需要先针对项目构建一些发布的脚本,通过脚本来自动化操... 查看详情

为了实现ci/cd,先来定制一个docker镜像实战精华篇(代码片段)

背景计划把手头的项目逐步改造为基于Docker容器的方式发布,同时,项目中已经采用了云厂商提供的CI/CD自动化发布流水线。因此,为配合CI/CD操作,需要先针对项目构建一些发布的脚本,通过脚本来自动化操... 查看详情

阿里云机器学习平台pai之分类实践(代码片段)

...感兴趣的小伙伴可以查看一下内容👇:hadoop专题:hadoop系列文章.spark专题:spark系列文章.阿里云系列:阿里云MaxComputerSQL学习之DDL.阿里云系列:阿里云MaxComputerSQL学习之DML.阿里云系列:阿里云Ma 查看详情

阿里云云效如何保障双11大型项目管理

每一年双11对阿里巴巴来说都是一个练兵场,一次更大规模技术创新、产品迭代、协同研发的练兵场。在2018年双11的“练兵场上”,阿里云云效——一站式企业协同研发平台支持着阿里巴巴众多部门、百个核心产品、千个垂直项... 查看详情

阿里云云效如何保障双11大型项目管理

每一年双11对阿里巴巴来说都是一个练兵场,一次更大规模技术创新、产品迭代、协同研发的练兵场。在2018年双11的“练兵场上”,阿里云云效——一站式企业协同研发平台支持着阿里巴巴众多部门、百个核心产品、千个垂直项... 查看详情