作家
登录

微服务架构下的开发部署

作者: 来源: 2017-07-18 09:18:38 阅读 我要评论

a) 安排运行项目组开辟须要用到公共的办事组件、例如zookeeper注册中间、Docker Registry镜像仓库、数据库等;

b) 为子项目编写在git上打分支的脚本,便于测试发版的时刻打分支;

c) 编写各类型应用宣布安排成镜像的Dockerfile;

d) 制造或者在网上找到现成的开辟所需情况的Docker镜像,并且Push到项目开辟应用的私有镜像库中;

f) 在Jenkins上设备主动编译或者安排义务,实现持续集成和安排。

本文将对项目标开辟、安排联调以及测试发版流程和规范做扼要解释,并供给项目各个阶段应用到的部分主动化脚本对象示例。

代码分支治理:

e) 编写Shell脚本实现将子项目打包成Docker镜像,并且Push到镜像仓库中。

Shell脚本:编写Shell脚本将项目打分支、宣布应用等开辟阶段的设备治理工作主动化,降低运维门槛、进步设备治理和运维的效力。

如图所示,在git上创建的每一个项目都须要至少建立develop和master两个分支。开辟人员只有权限把代码提交到develop分支上,日常平凡的持续集成和联调都大年夜develop分支上获代替码。 每个Sprint阶段测试发版时,设备治理员大年夜develop分支上创建一个用于测试的release分支。当测试修改bug时,开辟人员只把修改后的代码提交到对应的测试Release分支上。当测试版本稳定后,由设备治理员将代码归并到Master分支中。

b) 开辟者除了编写法度榜样逻辑外,还须要留意编写单位测试用例,因为分布式应用联调相对复杂,先做在编写单办事时髦好了测试再联调可以或许进步开辟效力。

主动安排和宣布:

项目借助于Shell脚本、Dockerfile、K8s设备文件和Jenkins义务实现了主动化的持续集成和安排。设备治理员在项目目次下编写的脚本文件构造如图2所示。

a) 创建分支的shell脚本,示例见附件1;

#!/bin/bashif [ -z "$1" ]; then cat <            EOF  exit 1  fi DEPLOY_VERSION=$1 RP_FILES=(subproject1/kube-rc.yaml subproject1/pom.xml subproject1/Makefile) if [ -z $(git branch -a | grep -e /${DEPLOY_VERSION}$) ]; then   git branch ${DEPLOY_VERSION}  git checkout ${DEPLOY_VERSION}  else  git checkout ${DEPLOY_VERSION}  git pull  fi  #调换k8s设备文件中情况指向,大年夜开辟切换到测试  #调换掉落pom.xml文件中的SNAPSHOT为release版本号  #调换掉落makefile中宣布的镜像Tag的latest为release版本号  for f in ${RP_FILES[@]}; do  sed -i -e "s#api.devproject.com#api.testproject.com#g" \  -e "s#           0.0.1-SNAPSHOT     #           ${DEPLOY_VERSION}-SNAPSHOT     #g" \  -e "s#latest#${DEPLOY_VERSION}#g" $f  done git commit -a -m "Create Branch ${DEPLOY_VERSION}"  git push origin ${DEPLOY_VERSION}  

b) Dockerfile示例文件,将Java dubbo办事宣布为镜像为例,示例见附件2:

FROM registry.xcompany.com/java:openjdk-7-jreMAINTAINER zhangsanENV spring.profiles.active="production" ENV JAVA_OPTS="-Xmx1024m"RUN mkdir -p /app  COPY target/subproject1.war /app/ COPY ./startup.sh /app/ RUN chmod +x /app/startup.sh WORKDIR /app CMD ["./startup.sh"]EXPOSE 8080

c) Makefile文件: 包含编译项目、将项目打包成Docker镜像、将镜像Push到镜像仓库、在K8s上创建ReplicationController、在K8s上创建service的敕令脚本:

IMAGE_PREFIX = registry.xcompany.com/project1/COMPONENT = subproject1ifndef BUILD_TAG BUILD_TAG = latestendifIMAGE = $(IMAGE_PREFIX)$(COMPONENT):$(BUILD_TAG)ifndef KUBE_OPS KUBE_OPS = --server=https://api.devproject.com --namespace=project1endifclean: mvn cleancompile: clean mvn -U -DskipTests=true -Dmaven.javadoc.skip=true package#将当前法度榜样打包成Docker镜像 build:  docker build -t $(IMAGE) . #将当前镜像Push到镜像仓库 push:  docker push $(IMAGE)run:  docker run --rm -it -e spring.profiles.active=application -p 8080:8080 $(IMAGE) #安排RelicationController deploy: kubectl create -f kube-rc.yaml $(KUBE_OPS)redeploy: kubectl WordStr -f kube-rc.yaml $(KUBE_OPS)undeploy: kubectl delete -f kube-rc.yaml $(KUBE_OPS) #创建service deploy-svc: kubectl create -f kube-svc.yaml $(KUBE_OPS)undeploy-svc: kubectl delete -f kube-svc.yaml $(KUBE_OPS)

d) K8s安排设备文件,创建ReplicationController、创建service示例见附件4:

#创建ReplicationControllerapiVersion: v1kind: ReplicationControllermetadata:  name: subproject1spec:  replicas: 1  selector:    name: subproject1  template:    metadata:      labels:        name: subproject1    spec:      containers:        - name: subproject1          image: registry.xcompany.com/project1/subproject1:latest          imagePullPolicy: Always          env:            - name: DUBBO_REGISTRY_ADDRESS              value: "kube://zookeeper:2181"            - name: DUBBO_REGISTRY_REGISTER              value: "true"          ports:            - containerPort: 8888

e) 设备治理员在Jenkins上设备主动或手动触发的义务,在jenkins义务中设备shell脚本,可实现应用的一键安排,示例见附件5。


  推荐阅读

  移动开发架构之MVVM模式

【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路! MVVM概念的提出和来源【编辑推荐】 17个晋升iOS开辟效力的必用对象 iOS开辟-基本框架 小白若何>>>详细阅读


本文标题:微服务架构下的开发部署

地址:http://www.17bianji.com/lsqh/36253.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)