Xiaomi Galaxy Talos Book

开发上线操作流程


建立task

建立Phabricator task:https://phabricator.d.xiaomi.net ,方便项目管理

开发准备

开发环境

  • Intellij IDEA
  • jdk1.6
  • mvn3.2.5以下

clone talos和talos-sdk的源码

  • git clone git@git.n.xiaomi.com:infra/galaxy.git
  • git clone git@git.n.xiaomi.com:infra/galaxy-sdk-java.git

Debug

  • 使用IDE调试
  • 使用打log等方式在staging集群运行调试

开发

  • 新建开发分支 git checkout -b new_feature
  • 建立远程开发分支 git push origin new_feature:new_feature_origin
  • 本地新建分支更改代码(由于arc land之后分支会删除),在new_feature分支执行 git checkout -b new_feature_edit
  • 在本地new_feature_edit分支修改代码并commit
  • git pull --rebase origin new_feature_origin 合并冲突
  • arc diff remotes/origin/new_feature_origin
  • arc land new_feature_edit --onto new_feature_origin
  • 如果以上周期过长,为免和master分支差距过大,需要合并master分支,切换到master分支git pull,在new_feature分支执行 git merge –no-ff master
  • 重复以上步骤直到开发完毕,将new_feature_origin合并至远程master分支,在master分支执行 git merge –no-ff new_feature_origin

测试与提交

单元测试

  • 为新功能添加单元测试,包括mock测试和MiniCLuster测试,其中MiniCLuster测试需要确保localhost和hostname对应的主机名一致,可在/etc/hosts中配置。具体参考HBase使用说明:http://infra.d.xiaomi.net/hbase/faq/hbase-help.html

BTV测试

  • 功能开发完毕使用talos/galaxy-talos-test/galaxy-talos-bvt-java目录下的测试代码进行BVT测试,确保程序主体功能正常

集群测试

  • 使用staging集群进行集群测试。本地编译talos-server安装至tank,更改talos-c3tst-talos.cf中的talos tank坐标,重启需要重启的job:
      deploy restart talos c3tst-talos --job restserver --update_package --skip_confirm
    
  • 重启成功后,观察服务日志

代码提交

  • 代码测试无误后,分别在~/galaxy/talos和~/galaxy-sdk-java/galaxy-talos-client目录提交code review:
        arc diff
    
  • 提交时应至少注明Summary和Reviewers,抄送cloud-computing,示例:

      Summary: ref T10374
    
      Test Plan: N/A
    
      Reviewers: zhangqian
    
      Subscribers: cloud-computing
    
  • 代码审核通过后提交git,合并入master分支:

        arc land
    

发版

talos项目和talos-client项目的发版,分别需要在~/galaxy/talos和~/galaxy-sdk-java/galaxy-talos-client目录下操作:

  • 更改版本号:
        bump-version.sh $VERSION
    
    注意:需要手动修改talos依赖的sdk版本
  • 编辑CHANGELOG.md,加入git log中此次发版的更改情况
  • codereview后将以上更改提交git
  • 打tag,例如:
        git tag -a galaxy-sdk-java-2.1.6-release
    
    如在打tag之前有了其他新的提交,可以使用补打标签的方式:
        git tag -a galaxy-sdk-java-2.1.6-release 9fbc3d0(commitID)
    
    通常git push不会将标签对象提交到git服务器,需要进行显式的操作将标签提交到git服务器:
        git push origin galaxy-sdk-java-2.1.6-release
    

编译sdk发布到nexus:

  • 在~/galaxy-sdk-java/galaxy-talos-client运行指令:
        mvn clean package -DskipTests
        mvn clean deploy -DskipTests
    
    注意:
    • 其中,pom需要做nexus相应配置,具体配置方法: http://wiki.n.miui.com/display/data/Nexus+deploy
    • 由于子项目galaxy-talos-spark的编译需要jdk1.7,而其余子项目的编译需要jdk1.6.所以应先注释掉pom文件中的galaxy-talos-spark,并用jdk1.6编译发版。再用jdk1.7单独编译发版galaxy-talos-spark.
    • 万一发布到nexus后发现错误,需要至nexus平台(http://nexus.d.xiaomi.net) 删除对应release版本后,再重新发布

编译talos server,并发布到nexus和tank:

将master分支的版本号改到下一个SNAPSHOT version:

  • 在~/galaxy/talos和~/galaxy-sdk-java/galaxy-talos-client目录下分别运行指令:
        bump-version.sh $SNAPSHOTVERSION
    
  • codereview后提交git

上线

更改minos的deployment-config/xiaomi-config/conf/talos目录下配置文件的以下内容,codereview后提交git:

  • 使用新的tank坐标,注释形式保留上一次的版本坐标,方便版本回退
  • 如有需要,同时更改其中talos配置

提JIRA通知SRE操作上线:

  • 根据SRE提供的JIRA模板提JIRA:http://docs.pt.xiaomi.com/computing/_book/stream/lcs/standard/jira.html
  • SRE的升级操作,升级restserver的minos指令示例如下:
      ./deploy restart talos ClusterName --job metricserver canary --update_package
      ./deploy rolling_update talos ClusterName --job restserver --time_interval=360 --update_package
    
    • 其中,如更修改了配置,还需在操作指令中加入--update_config参数
  • 上线过程中和操作后,观察上线集群的服务状态和日志;如改动影响较大,应先上线测试集群观察一段时间后再全面上线
  • JIRA地址:http://jira.n.xiaomi.com/projects/SSOR/issues/