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。
推荐阅读
【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路! MVVM概念的提出和来源【编辑推荐】 17个晋升iOS开辟效力的必用对象 iOS开辟-基本框架 小白若何>>>详细阅读
本文标题:微服务架构下的开发部署
地址:http://www.17bianji.com/lsqh/36253.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示