前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Gitlab Flow到容器(下)

Gitlab Flow到容器(下)

原创
作者头像
陈不成i
修改2021-06-07 17:45:46
修改2021-06-07 17:45:46
3320
举报
文章被收录于专栏:ops技术分享ops技术分享

三.Gitlab Flow小结

整个过程贯彻了git flow 预发布分支release,hotfix的核心用法, 同时在部署方式上也有一定的改进。

  • alpha上使用git预发布分支名release-1.0.0作为镜像Tag,切出release分支即形成同tag名镜像,自动部署
  • alpha(develop)上有release-1.0.0,release-1.0.1 这样版本递增的tag; 但是如果针对某一release-版本bugfix,镜像tag不会变,代码会更新,这里其实与docker tag的用法有点不符;
  • 在kubernetes deploy我暂时使用两个不同命令来更新镜像.

kubectl set image …;

kubectl roloout restart deploy …

对develop release分支形成的镜像tag上可尝试带上CI_COMMIT_SHORT_SHA 来规避这种骚操作。

prod上要求从release分支上打出git标签,同时要求手动点击部署,多步骤操作确保部署是受控可预期,并且可回滚

集成测试采用docker-compose部署; alpha,prod是采用k8s部署; 从上面的Gitlab flow 知道:

  • Git develop分支、release-分支、tag标签、master分支会打出容器镜像,
  • Git develop分支代码(ImageTag:develop)(只)会自动部署集成测试环境,
  • Git release- 分支(ImageTag:release-1.0.0)(只)会自动部署到alpha,
  • Git tag标签(ImageTag:v1.0.0) 手动点击部署到prod
  1. stages:
  2. - build
  3. - build_image
  4. - deploy
  5. variables:
  6. deploy_path: "/home/eap/website"
  7. build:
  8. stage: build
  9. script:
  10. - pwd
  11. - "for d in $(ls app/src);do echo $d;pro=$(pwd)/app/src/$d/$d.csproj; dotnet build $pro; done"
  12. tags:
  13. - my-tag
  14. build_image:EAPWebsite:
  15. stage: build_image
  16. script:
  17. - dotnet publish app/src/EAP.Web/EAP.Web.csproj -c release -o container/app/publish/
  18. - docker build -t $DOCKER_REGISTRY_HOST/eap/website:$CI_COMMIT_REF_NAME container/app
  19. - docker login $DOCKER_REGISTRY_HOST -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
  20. - docker push $DOCKER_REGISTRY_HOST/eap/website:$CI_COMMIT_REF_NAME
  21. tags:
  22. - my-tag
  23. only:
  24. - tags
  25. - develop
  26. - master
  27. - /^release-.*$/i
  28. deploy:intergate-test:
  29. stage: deploy
  30. script:
  31. - ssh -t testUser@10.202.42.252 "cd /home/eap/website && export TAG=$CI_COMMIT_REF_NAME && docker-compose pull website && docker-compose -f docker-compose.yml up -d"
  32. tags:
  33. - my-tag
  34. only:
  35. - develop # 开发阶段,intergate Test环境只会部署ImageTag:develop镜像
  36. deploy:alpha:
  37. stage: deploy
  38. script:
  39. - ssh -t testUser@10.201.82.170 "sudo kubectl set image deployment/eap-website eap-website=repository.****.com:8443/eap/website:${CI_COMMIT_REF_NAME} && sudo kubectl rollout status deployment/eap-website"
  40. tags:
  41. - my-tag
  42. only:
  43. - /^release-.*$/i # alpha环境只部署以ImageTag:release-开头镜像
  44. deploy:prod:
  45. stage: deploy
  46. script:
  47. - ssh -t testUser@10.202.42.20 "sudo kubectl set image deployment/eap-website eap-website=repository.****.com:8443/eap/website:${CI_COMMIT_REF_NAME} && sudo kubectl rollout restart deployment/eap-website"
  48. tags:
  49. - my-tag
  50. only:
  51. - tags
  52. - master
  53. when: manual # prod环境,人工点击部署
  54. 使用ssh远程部署
  55. 基于docker-compose完成的Gitlab-ci
  56. 在kubernetes环境,我是使用kubectl set image …命令改变镜像,同分支名更新重新拉取镜像部署。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三.Gitlab Flow小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档