开源版本_开源项目KafkaCenter 版本持续集成(CI)实践

2fab27bdc5871fd54b0dffddd6357647.png

开篇

本文简单介绍开源项目KafkaCenter 版本持续集成(CI)实践方案,主要解决了三个问题:

  1. 前后端项目编译
  2. 发布Github release包
  3. 制作docker镜像

希望能给你带来一点参考。

详细信息可以参考 https://github.com/xaecbd/KafkaCenter

正文

版本管理

KafkaCenter 后端服务是java,使用maven管理的,有多个module,为了做到版本一致,我们使用了${revision}。这个是maven3.5+ 才支持,主要是为了对CI友好。

例如:

父pom

<?xml version="1.0" encoding="UTF-8"?><project >  <modelVersion>4.0.0modelVersion>  <groupId>org.nesc.ec.bigdatagroupId>  <artifactId>KafkaCenterartifactId>  <version>${revision}version>  <packaging>pompackaging>  <name>KafkaCentername>  <url>https://github.com/xaecbd/KafkaCenterurl>  <description>Kafka Center Platformdescription>    ...  <properties>    <revision>1.0.0-SNAPSHOTrevision>  properties>  <modules>    <module>KafkaCenter-Basemodule>    <module>KafkaCenter-Coremodule>  modules>project>

子module

<?xml version="1.0"?><project>  <modelVersion>4.0.0modelVersion>  <parent>    <groupId>org.nesc.ec.bigdatagroupId>    <artifactId>KafkaCenterartifactId>    <version>${revision}version>  parent>  <artifactId>KafkaCenter-BaseartifactId>  <name>KafkaCenter-Basename>  <url>https://github.com/xaecbd/KafkaCenterurl>project>

通过如下命令,可以在打包的时候指定版本号:

mvn -Drevision=2.1.0 -Dchangelist= clean package

Docker镜像

在项目根目录下新建docker文件夹,包含三个文件:

docker-build-release.sh build镜像及发布镜像的脚本

#!/usr/bin/env bashDOCKER_IMAGE_NAME="xaecbd/kafka-center"VERSION=${TRAVIS_TAG#v}echo "KafkaCenter version: $VERSION"echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdincp $TRAVIS_BUILD_DIR/KafkaCenter-Core/target/*.jar $TRAVIS_BUILD_DIR/docker/docker build  -t $DOCKER_IMAGE_NAME:$VERSION $TRAVIS_BUILD_DIR/docker/docker imagesdocker push $DOCKER_IMAGE_NAME:$VERSION

Dockerfile docker 镜像定义文件

FROM adoptopenjdk/openjdk8:jre8u252-b09-alpineLABEL author="Turman.P.Du"ENV PROJECT_BASE_DIR /opt/app/kafka-center/WORKDIR ${PROJECT_BASE_DIR}COPY *.jar ${PROJECT_BASE_DIR}/COPY *.sh ${PROJECT_BASE_DIR}/RUN chmod +x *.shENTRYPOINT ["sh","start.sh"]

start.sh 应用启动脚本,非必须,只是我们习惯放这么个脚本,可以在应用启动前做一些工作。推荐在启动java应用前增加exec命令,这样可以让spring容器在docker容器停止运行前执行一些操作(可以用作应用停止前执行收尾工作,例如保存数据,停止不可中断的任务)。

#!/bin/shecho "PROJECT_BASE_DIR :"$PROJECT_BASE_DIR#cd $APP_ROOT_DIRcd $PROJECT_BASE_DIRappName=`ls|grep .jar$`echo start to run $appNameif [ -n "$JAVA_OPTIONS" ];then  exec java $JAVA_OPTIONS -jar $appName   $@else    exec java -jar $appName   $@fi

travis

github action已经很好了,我没有采用的原因是需要熟悉成本有些操作可能暂时做不到。而可以预见性的travis都能很好的做到。因此目前的方案是采用travis。

实现要求

通过新建tag(只能是tag触发),自动编译前后端代码,发布github release,构建docker镜像,发布镜像。

language: javajdk: - openjdk8cache: directories:   - $HOME/.m2   - $HOME/.npm   - $TRAVIS_BUILD_DIR/dist: trustyjobs: include:   - stage: ui_build     language: node_js     node_js: 10.15.2     script: cd KafkaCenter-Frontend && npm install && npm run build   - stage: GitHubRelease     install:       - echo GitHubRelease     script: mvn -Drevision=${TRAVIS_TAG#v} clean package -Dmaven.test.skip=true     before_deploy:       - mkdir -p $TRAVIS_BUILD_DIR/deploy       - cp $TRAVIS_BUILD_DIR/KafkaCenter-Core/target/*.gz $TRAVIS_BUILD_DIR/deploy       - rm -f $TRAVIS_BUILD_DIR/KafkaCenter-Core/target/*.gz       - ls -l $TRAVIS_BUILD_DIR/deploy     deploy:       provider: releases       api_key: $API_KEY       file_glob: true       skip_cleanup: true       file: deploy/*.tar.gz       on:         tags: true     after_deploy: rm -rf $TRAVIS_BUILD_DIR/deploy   - stage: BuildDockerImageforRelease     install:       - echo Build Docker Image for Release     before_script:       - chmod +x ./docker/docker-build-release.sh     script: ./docker/docker-build-release.shstages: - name: ui_build   if: tag =~ /^v\d+\.\d+\.\d+.*$/ - name: GitHubRelease   if: tag =~ /^v\d+\.\d+\.\d+.*$/ - name: BuildDockerImageforRelease   if: tag =~ /^v\d+\.\d+\.\d+.*$/notifications: email: true

在travis管理页面需要配置API_KEYDOCKER_USERNAMEDOCKER_PASSWORD

参考

  1. Maven CI Friendly Versions
  2. spring-boot-docker
  3. docs.travis-ci.com

fa595e2b626fd5351db27a55752acf6b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值