【云效最完整测评】从自建DevOps部署微服务再到云效

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本人还是个在校生,不是什么业界大佬,每次社区出征文计划我都会珍惜测评的机会。因为本人专业学习的是网络方向,对开发其实还是有不少欠缺。在学习云计算时对devops进行了研究,包括容器云k8s的一些列运维搭建。很多概念上的东西要是理解错误,希望各位能够多多指教QAQ

   DevOps意为“Development”“Operations”,即为开发人员和运维人员之间沟通合作的开发模式,通过自动化软件交付架构更变的流程,实现开发运维一体化,使得开发构建、测试、发布能够更加快捷、频繁和高效稳定。DevOps是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保证部门之间的沟通、协作与整合。它的出现时由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。其最大的特点就是极速的迭代和快速的用户反馈。

   云效,云原生时代一站式BizDevOps平台,支持公共云、专有云和混合云多种部署形态,通过云原生新技术和研发新模式,助力创新创业和数字化转型企业快速实现研发敏捷和组织敏捷,打造双敏组织,实现 10 倍效能提升。

   如今,业务追求上云,业务流程也可以上云。阿里的云效DevOps全家桶,真正的为人们带来便利,今天,我就以jenkins+gitlab基于k8s集群实现自建DevOps系统的方式部署开源微服务PiggyMetrics,与云效DevOps对比,告诉大家真正的免运维,实现高效的业务开发流程。

image.png


自建DevOps实现CI/CD-部署微服务PiggyMetrics

这里,我先从自建devops系统并部署微服务应用开始

测试的devops系统架构流程如下:

   基于现有的kubernetes集群和harbor镜像仓库,搭建以docker运行的gitlab代码仓库和CI工具jenkins,并编写自动化流水线脚本。

 

image.png

1.部署jenkins

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。我们通过容器部署jenkins服务

容器名称:jenkins;端口映射:8080:8080;使用root身份生成容器;

[root@master  opt]# docker run -itd --name jenkins -p 8881:8080 -u  root -v /home/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v  /usr/bin/docker:/usr/bin/docker -v /usr/bin/kubectl:/usr/local/bin/kubectl -v /root/.kube:/root/.kube  jenkins/jenkins:2.262-centos


设置jenkins

web端通过http://IP:8080访问Jenkins

 

image.jpeg

 

查看默认密码:

[root@master ~]#  docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
54670064056e42a2a47485a5e3356e57

输入密码并点击“继续”

 

image.jpeg


选择“安装推荐的插件”,如图所示:

image.jpeg


插件安装完成后自动转入管理员用户创建界面

 

image.jpeg

输入用户信息,点击“保存并完成”

image.jpeg

 

配置完URL后使用新建的用户登录Jenkins,如图

image.jpeg

 

2.部署Gitlab

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。

我们这里也是通过容器部署gitlab服务

容器名称:gitlab;端口映射:1022:2281:80443:443;容器重启策略:always

[root@master  opt]# docker run -itd --name gitlab -p 81:80 -p 443:443 -v  /root/gitlab/config:/etc/gitlab -v /root/gitlab/logs:/var/log/gitlab -v  /root/gitlab/data:/var/opt/gitlab --restart always  gitlab/gitlab-ce:12.9.2-ce.0

image.jpeg

设置root用户信息并使用root用户登录Gitlab,如图所示:

 image.jpeg

 

创建项目Create a project

image.png

 

我们就可以在本地通过git上传代码到仓库

git init
git  remote add origin http://ip/xxxx.git
git add .
git commit -m  'upload'
git push -u origin  master


3.配置Jenkins对接Gitlab

gitlab设置Outbound  requests

image.png

 

生成“Access Tokens”并命名为jenkins

image.png

 image.png

 设置Jenkins取消对’/project end-point进行身份验证;

image.png

 image.png

 

jenkins添加gitlab api  token

image.png 

4.配置Jenkins连接maven

采用docker in docker的方式在Jenkins内安装maven

[root@master ~]# cp  apache-maven-3.6.3-bin.tar.gz /root/jenkins/
[root@master ~]#  docker exec -it jenkins bash
[root@b957b62337cc  /]# cd /var/jenkins_home/
[root@b957b62337cc  jenkins_home]# tar -zxvf apache-maven-3.6.3-bin.tar.gz -C .
[root@2927036f2450  jenkins_home]# mv apache-maven-3.6.3 /usr/local/maven
//配置maven环境变量
[root@b957b62337cc  jenkins_home]# vi /etc/profile
export  M2_HOME=/usr/local/maven
export  PATH=$PATH:$M2_HOME/bin
[root@2927036f2450  /]# vim /root/.bashrc
if [ -f /etc/bashrc  ]; then
        . /etc/bashrc
        source  /etc/profile
fi

Jenkins中配置maven信息

Dashboard-全局工具配置

image.png

 

5.配置CI/CD

新建流水线任务

image.png

配置触发器

image.png

 

image.png

编写流水线脚本

构建微服务项目中的gatewayconfig服务,

将构建后的镜像自动上传到Harbor仓库,

并自动发布gatewayconfig服务到Kubernetes集群的springcloud命名空间下

node{
    stage('git clone'){
        //check CODE 从代码仓库克隆
        git credentialsId:  'ad561b3b-5252-43d5-b9c4-ec9bece0134c', url: 'http://IP/xxx.git'
    }
    stage('maven build'){
//maven编译
        sh  '''/usr/local/maven/bin/mvn package -DskipTests -f  /var/jenkins_home/workspace/xxx'''
    }
    stage('image build'){
//构建镜像,并将镜像ID变量作为tag
        sh '''
              echo $BUILD_ID
              docker build -t 10.24.2.10/xxx/gateway:$BUILD_ID -f  /var/jenkins_home/workspace/xxx/gateway/Dockerfile   /var/jenkins_home/workspace/xxx/gateway
              docker build -t 10.24.2.10/xxx/config:$BUILD_ID -f  /var/jenkins_home/workspace/xxx/config/Dockerfile   /var/jenkins_home/workspace/xxx/config'''
    }
    stage('test'){
//测试镜像
        sh '''docker run -itd --name gateway  10.24.2.10/xxx/gateway:$BUILD_ID
        docker ps -a|grep  chinaskillproject|grep Up
        if [ $? -eq 0 ];then
            echo "Success!"
            docker rm -f gateway
        else
            docker rm -f gateway
            exit 1
            fi
        '''
    }
    stage('upload registry'){
//上传构建完成的镜像到harbor镜像仓库
        sh '''docker login  10.24.2.10 -u=admin -p=xxxxxxxxxxxxxx
            docker push  10.24.2.10/chinaskillproject/gateway:$BUILD_ID
            docker push  10.24.2.10/chinaskillproject/config:$BUILD_ID'''
    }
    stage('deploy k8s'){
        //创建命名空间,部署yaml脚本到k8s集群
       sh 'kubectl create ns springcloud'
       sh 'kubectl apply -f  /var/jenkins_home/workspace/xxx/yaml/deployment/gateway-deployment.yaml  --kubeconfig=/root/.kube/config'
       sh 'kubectl apply -f  /var/jenkins_home/workspace/xxx/yaml/deployment/config-deployment.yaml  --kubeconfig=/root/.kube/config'
       sh 'kubectl apply -f  /var/jenkins_home/workspace/xxx/yaml/svc/gateway-svc.yaml --kubeconfig=/root/.kube/config'
       sh 'kubectl apply -f  /var/jenkins_home/workspace/xxx/yaml/svc/config-svc.yaml --kubeconfig=/root/.kube/config'
    }
}
  • image.png

 

配置gitlabwebhook

Gitlab,进入项目,点击左侧导航栏Settings”→“Webhooks

GitLab webhook  URL地址填入URL处,禁用SSL认证,如图所示。

image.png


点击Add webhook添加webhook

image.png

点击Push events”进行测试

image.jpeg

结果返回HTTP 200则表明Webhook配置成功。

 

6.触发流水线

git重新提交代码,触发流水线

[root@master  ]# git commit -m "Initial commit"
# On  branch master
nothing  to commit, working directory clean
[root@master  ]# git push -u origin master

触发后开始运行

image.png

流水线一路绿灯,构建部署成功

image.png

 

微服务成功部署在k8s集群,CI/CD部署完成

image.png

 

接下来就是本次的正文了-云效

为什么要花这么多功夫写自建devops系统呢?

因为这些部署在云效之中,都!不!需!要!

 当自建系统时,基础设施需要确保Kubernetes集群、部署镜像仓库、部署代码仓库、部署CI/CD工具,还需要针对业务编写设置不同的流水线,并考虑服务的高可用性

一切复杂冗余的部署运维,有了云效,都可以省去!


就好比官方文档中所述:

  • 为什么选择云效公共云,而不是自建或开源?
  • 免搭建、免维护,注册即用
  • 一站式DevOps,账号、数据打通
  • 钉钉集成,成员、消息及时同步
  • 无缝对接阿里云ECS、ACK等
  • 丰富的研发效能数据洞察
  • 精细化企业级安全防控能力


云效DevOps-部署微服务PiggyMetrics

一、云效代码管理 Codeup

云效代码管理 Codeup 是阿里云出品的一款企业级代码管理平台,提供代码托管、代码评审、代码扫描、质量检测等功能,全方位保护企业代码资产,帮助企业实现安全、稳定、高效的研发管理。

代码仓库相信是个搞计算机的都不陌生,最热门的github/gitee等在线代码仓库,或gitlab等等。我们对代码仓库最基本的需求便是代码托管与版本管理。云效提供了代码托管,同时也可以连接其他git仓库。

   这里,我们从代码管理开始

image.png


创建新代码库

image.png 

 

通过git上传本地代码文件

image.png

Tips:git连接时的账号需要在个人设置里https密码中重新设置,与阿里的登录账号无关

  • image.png


上传我们的测试代码后,仓库显示

image.png

 

云效的代码管理功能类似与常见代码仓库,包括项目分支、请求提交记录、安全管理

image.png


在代码安全中,云效提供了依赖包漏洞检测与源码漏洞检测

image.png

 

image.png

 

二、云效流水线Flow

   云效流水线完美的替代jenkinsCI功能,相比较自建的持续交付工具,使用 Flow 仅仅需要几步,就可以快速搭建 CICD 流程。Flow 提供了开箱即用的构建环境,提供了数十种通用的流水线模版帮助你快速创建流水线,可以根据开发业务选择不同的模板,这个对于自己编写pipeline脚本真的方便了很多,当我在自己编写流水线脚本时,需要进行大量的测试调试,还需要根据不同的业务需求而进行调整。Flow提供的不同功能的模板,大量减少了运维工作

image.png


在这里,我们新建流水线,选择

image.png

 

image.png


根据我们发布流程,我们分别需要设置四个流程

第一阶段。选择流水线来源,选择上面我们完成代码上传的云效codeup,选择好仓库和分支

image.png 

 

第二阶段。我们需要对仓库内代码进行maven build,流水线运行时会将打包完的jar包暂存在工作空间中 

image.png


第三阶段。我们配置镜像构建,这里需要构建微服务中的gatewayconfig镜像,选择镜像构建推送到阿里云

image.png


配置阿里镜像仓库,设置Dockerfile的文件路径,可以设置构建镜像的tag

image.png

 

第四阶段。我们将构建完成的镜像部署到k8s集群中,我们可以直接部署到阿里的ACK集群中

image.png


选择好kubectl的选项,以及yaml部署脚本文件

image.png

 

微服务PiggyMetrics的流水线Flow到这里就完成设置了,非常简单便捷的部署了四个流程

image.png

 

Tips:每个阶段还可以配置通知功能

image.png


完成配置后,点击运行配置

image.png


流水线运行成功,一路绿灯

PS:图中构建出现的告警是因为dockerfile中编写容器源镜像选择的是dockerhub官方的,阿里建议使用国内镜像站

image.png


此时我们进ACK集群,查看创建的deployment,如图configgateway以及正常上线

image.png

 

通过ACK服务,使用负载均衡就可以暴露服务端口在公网上

image.png

 

PiggyMetrics微服务部署完成,公网访问成功

image.png



其他云效全家桶工具体验

云效知识库 Thoughts

   文档管理是最为重要的功能,文档是最基础的技术载体,对新人进入时可以通过学习文档快速进入工作,也可以避免开发中解决重复性的问题解决。

   多人协作的文档管理产品有很多,常见的以Wiki为主,企业常用的文档及项目管理为Confluence+jira,也有公有云SaaS产品语雀,这些产品我或多或少接触过。但是对于一些小型团队,这些产品偏重。

   这是我个人在使用的wiki知识平台wiki.js,搭建较轻,但是还是有运维的要求(数据库、存储备份等)

image.png

 

云效中集成了知识库模块,我第一使用感受就是简约、轻

image.png

 

可以有几大经典的模板供创建,非常方便

image.png

 

我选择了创建IT运营模板,可以配置文档库公开性

image.png


 

image.png

 

模板库有大量现成文档模板,包含了标题,可以促进编写文档的标准化

image.png

 

 文档编辑是markdown格式的,熟悉markdown的非常好上手

image.png 


同时也可以导入现有的文档内容,包括了markdown\云效文档导出\Confluence\Word文件

image.png


测试了导入word文档文件,对word导入效果还不错

image.png

测试管理Testhub

云效提供了测试管理,针对研发中测试人员直接在云效中跟进项目测试与反馈

创建测试用例库,填写名称、设置安全性、填写编号

image.png

 

新建用例,填入标题、测试条件、测试过程和期望

image.png

 

新建测试计划,选择人员设置日期

image.png


当测试人员完成测试后,就可以将测试结果反馈到平台

image.png

 

image.png

应用交付

AppStack中最为核心的三概念为发布应用、部署环境、应用编排

1.发布

一个可独立交付的对外提供服务的单元,在研发态,通常对应一个到多个功能模块,关联一个或多个代码库;在运行态,通常对应一组Kubernetes资源。

2.环境

环境是应用运行态的载体,是应用维度做部署和运维的操作界面。在AppStack中,一个应用可以创建多套环境,用于开发、测试、生产等不同场景,用户可以分别对这些环境进行更新、管理和运行状态监控。

3.编排

是对应用部署架构的描述,通常包含工作负载、配置项、网络、存储声明等,是一组Kubernetes资源组合。

image.png

 

我们可以选择发布应用的流水线,如上文发布微服务PiggyMetrics时配置的流水线

image.png

 

部署环境,appstack提供了三大预设环境,如开发环境、测试环境、生产环境,贴合实际的开发环境

image.png

 

应用编排使用了原生 YAML 的形式来描述应用部署架构,将预设的YAML脚本设置完成后即可完成应用的编排

image.png

image.png

项目管理

   云效Projex是新一代企业级研发协作平台,集成了敏捷研发项目管理的最佳实践,提供了针对项目、迭代、需求、缺陷等多个维度的协同管理以及相关的统计报告,让研发团队高效协作、践行敏捷并持续交付产品价值。

   通过与云效「代码管理」和「流水线」的结合,可打造一站式、端到端、全栈敏捷的软件研发DevOps项目。

image.png

项目,是围绕某一特定目标(如产品交付或服务),组织相应人力、物力资源进行的临时性工作。项目具有非常强的计划性,有确定的开始日期和结束日期,项目的周期时长有短期或长期两种形态。在现代软件交付项目中,也有未设置项目结束日期,以迭代的方式来持续演进交付产品。

项目是Projex的核心对象,汇集了同类工作内容以及投入的资源。

image.png

选择项目模板,填写基本信息,即可开始项目管理

image.png

云端开发DevStudio

   云效云端开发  DevStudio 是一款阿里云云效推出的面向云原生的 WebIDE 产品。只需一个浏览器即可获得与本地 IDE  一致的开发体验。通过预置开发环境,使用智能编码能力,即可快速地编辑、调试、运行、部署云端代码。

   DevStudio  以 WebIDE 为基础,提供函数计算、IoT应用和小程序等应用的开发和调试,串联起整个 DevOps  流程,无需用户配置环境,更不受操作系统限制,通过浏览器,即可使用完整 IDE 功能。DevStudio 支持在线安装插件来拓展原有功能,兼容所有常用  VSCode 插件

image.png

image.png

 

企业管理

云效全家桶,提供了高效的企业管理,分为三大为:企业和组织、企业成员管理、企业角色与权限

云效和钉钉集成使能组织架构和成员同步;钉钉消息通知,沟通协作更便捷

同时精细化企业级安全防控能力,提供精细化企业权限管控,提供事前、事中、事后多种安全防控机制

 image.png

image.png 



相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
相关文章
|
6天前
|
项目管理 微服务
云效常见问题之将多个微服务应用集成到一次研发流程中发布上线如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
17 0
|
2月前
|
Kubernetes 安全 Docker
微服务中的部署方法。
# 微服务 # 部署 # 去 # 开发运营
43 0
|
24天前
|
Java Docker 微服务
如何使用Docker和Docker Compose部署微服务
【2月更文挑战第12天】
106 0
|
6天前
|
弹性计算 监控 测试技术
云效常见问题之应用交付生产环境部署设置发布的时间窗口如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
15 2
|
12天前
|
监控 持续交付 Docker
深入浅出:基于Docker的微服务部署实践
【2月更文挑战第26天】在当前软件开发领域,微服务架构与容器化技术成为提升应用可伸缩性、可靠性和开发效率的关键手段。本文将深入探讨如何利用Docker容器技术实现微服务的快速部署与管理,涵盖环境搭建、服务打包、网络配置及持续集成等核心话题。通过实例演示,旨在为开发者提供一套行之有效的微服务部署解决方案。
|
19天前
|
Kubernetes 测试技术 持续交付
探索微服务架构下的持续集成与部署最佳实践
本文将深入探讨在微服务架构下实施持续集成与部署的最佳实践,介绍如何利用现代化工具和流程来实现自动化测试、持续集成、灰度发布等关键环节,帮助开发团队提升交付效率和质量。
|
20天前
|
Kubernetes 网络安全 Windows
要在云效部署到阿里云服务器上的 Windows Server 上的 IIS
【2月更文挑战第18天】要在云效部署到阿里云服务器上的 Windows Server 上的 IIS
151 4
|
24天前
|
缓存 应用服务中间件 数据库
微服务多机房部署
【2月更文挑战第13天】微服务一般要部署在多个机房,保证有一个机房因为各种不可抗力因素导致不可用时,可以把流量切换到其他可用机房来避免故障。
|
1月前
|
云计算 开发者 Docker
深入浅出:使用Docker部署微服务架构
在当今快速迭代的软件开发环境中,微服务架构凭借其灵活性和可扩展性成为了热门趋势。本文将探讨如何利用Docker这一强大的容器化技术,简化和加速微服务应用的部署与管理过程。我们将从微服务的基本概念出发,逐步深入到Docker的核心功能,最后通过一个实际案例演示整个部署流程。文章旨在为开发者提供一个清晰、实用的指南,帮助他们有效地利用Docker在微服务架构下的应用部署。
24 0
|
1月前
|
持续交付 开发者 Docker
深入浅出:使用Docker简化微服务部署
在当今快速发展的软件开发领域,微服务架构因其高度的模块化和可伸缩性而受到广泛欢迎。然而,微服务的部署与管理往往是一个挑战,尤其是在多环境下维护一致性时。本文将探讨如何使用Docker容器技术来简化微服务的部署流程,从而实现快速、一致且可复制的部署策略。我们将通过一个示例项目演示如何构建、容器化及部署微服务,并讨论Docker在解决微服务架构中常见问题(如服务隔离、环境一致性和自动化部署)方面的优势。本文旨在为开发人员提供一种更加高效和可靠的微服务部署方法,帮助团队更好地利用Docker的强大功能,优化开发流程。
16 2

相关产品

  • 微服务引擎
  • 服务网格