如需进行学习Gitlab CI文件如何编写请参考官方文档

Choerodon中CI文件详解

  • 通过Choerodon创建应用后,在Gitlab中将自动会对应创建一个Git仓库,并且会在该仓库的CI Secret中添加一个,它是Choerodon给该Git仓库的唯一标识,请勿更改。
  • 下面curl语句最主要是进行获取环境变量以及一些固定的函数。
  • CHOERODON_URL为Choerodon的API地址,此项建议环境变量配置在Runner中。
  • type的值有microservicefrontlib,分别对应java后端应用,前端,java库。

.auto_devops.sh详解

  • 上述语句就是在CI的每个JOB运行后立即请求.auto_devops.sh脚本,脚本中有该项目的相关变量和一些封装的函数。
  1. C7N_COMMIT_TIMESTAMP=$(git log -1 --pretty=format:"%ci"| awk '{print $1$2}' | sed 's/[-:]//g')
  2. C7N_COMMIT_YEAR=${C7N_COMMIT_TIMESTAMP:0:4}
  3. C7N_COMMIT_MONTH=$(echo ${C7N_COMMIT_TIMESTAMP:4:2} | sed s'/^0//')
  4. C7N_COMMIT_DAY=$(echo ${C7N_COMMIT_TIMESTAMP:6:2} | sed s'/^0//')
  5. C7N_COMMIT_HOURS=${C7N_COMMIT_TIMESTAMP:8:2}
  6. C7N_COMMIT_MINUTES=${C7N_COMMIT_TIMESTAMP:10:2}
  7. C7N_COMMIT_SECONDS=${C7N_COMMIT_TIMESTAMP:12:2}
  8. export C7N_COMMIT_TIME=$C7N_COMMIT_YEAR.$C7N_COMMIT_MONTH.$C7N_COMMIT_DAY-$C7N_COMMIT_HOURS$C7N_COMMIT_MINUTES$C7N_COMMIT_SECONDS
  9. # 8位sha值
  10. export C7N_COMMIT_SHA=$(git log -1 --pretty=format:"%H" | awk '{print substr($1,1,8)}')
  11. # 获取的项目名称
  12. export GROUP_NAME={{ GROUP_NAME }}
  13. # 获取的应用名称
  14. export PROJECT_NAME={{ PROJECT_NAME }}
  15. export C7N_BRANCH=$(echo $CIRCLE_BRANCH | tr '[A-Z]' '[a-z]' | tr '[:punct:]' '-')
  16. elif [ $GITLAB_CI ]; then
  17. export C7N_BRANCH=$CI_COMMIT_REF_SLUG
  18. fi
  19. # 默认Version
  20. if [ $CI_COMMIT_TAG ]; then
  21. export C7N_VERSION=$CI_COMMIT_TAG
  22. elif [ $CIRCLE_TAG ]; then
  23. export C7N_VERSION=$CIRCLE_TAG
  24. else
  25. export C7N_VERSION=$C7N_COMMIT_TIME-$C7N_BRANCH
  26. fi
  27. export CI_COMMIT_TAG=$C7N_VERSION
  28. # 更新maven项目本版本号
  29. function update_pom_version(){
  30. mvn versions:set -DnewVersion=${CI_COMMIT_TAG} || \
  31. find . -name pom.xml | xargs xml ed -L \
  32. -N x=http://maven.apache.org/POM/4.0.0 \
  33. -u '/x:project/x:version' -v "${CI_COMMIT_TAG}"
  34. mvn versions:commit
  35. }
  36. function git_merge(){
  37. git config user.name ${GITLAB_USER_NAME}
  38. git config user.email ${GITLAB_USER_EMAIL}
  39. git checkout origin/${1:-"develop"}
  40. git merge ${CI_COMMIT_SHA} --no-commit --no-ff
  41. }
  42. # 此项为上传构建并上传chart包到Choerodon中,只有通过此函数Choerodon才会有相应版本记录。
  43. function chart_build(){
  44. # 查找Chart.yaml文件
  45. CHART_PATH=`find . -maxdepth 3 -name Chart.yaml`
  46. # 重置values.yaml文件中image.repository属性
  47. sed -i "s,repository:.*$,repository: ${DOCKER_REGISTRY}/${GROUP_NAME}/${PROJECT_NAME},g" ${CHART_PATH%/*}/values.yaml
  48. # 构建chart包,重写version与app-version为当前版本
  49. helm package ${CHART_PATH%/*} --version ${CI_COMMIT_TAG} --app-version ${CI_COMMIT_TAG}
  50. TEMP=${CHART_PATH%/*}
  51. FILE_NAME=${TEMP##*/}
  52. # 通过Choerodon API上传chart包
  53. curl --fail -X POST \
  54. -F "token=${Token}" \
  55. -F "version=${CI_COMMIT_TAG}" \
  56. -F "file=@${FILE_NAME}-${CI_COMMIT_TAG}.tgz" \
  57. -F "commit=${CI_COMMIT_SHA}" \
  58. -F "image=${DOCKER_REGISTRY}/${GROUP_NAME}/${PROJECT_NAME}:${CI_COMMIT_TAG}" \