文章目录[隐藏]
CI/CD
CI 持续集成(Continuous Integration)
持续集成(CI)帮助开发人员更加频繁地(有时甚至每天)将代码更改合并到开发分支或“主干”中。一旦开发人员对应用所做的更改被合并,系统就会通过自动构建应用并运行不同级别的自动化测试(通常是单元测试和集成测试)来验证这些更改,确保这些更改没有对应用造成破坏。这意味着测试内容涵盖了从类和函数到构成整个应用的不同模块。如果自动化测试发现新代码和现有代码之间存在冲突,CI 可以更加轻松地快速修复这些错误。
CD 持续交付(Continuous Delivery)
完成 CI 中构建及单元测试和集成测试的自动化流程后,持续交付可自动将已验证的代码发布到存储库。为了实现高效的持续交付流程,务必要确保 CI 已内置于开发管道。持续交付的目标是拥有一个可随时部署到生产环境的代码库。
在持续交付中,每个阶段(从代码更改的合并,到生产就绪型构建版本的交付)都涉及测试自动化和代码发布自动化。在流程结束时,运维团队可以快速、轻松地将应用部署到生产环境中。
CD 持续部署(Continuous Deployment)
对于一个成熟的 CI/CD 管道来说,最后的阶段是持续部署。作为持续交付——自动将生产就绪型构建版本发布到代码存储库——的延伸,持续部署可以自动将应用发布到生产环境。由于在生产之前的管道阶段没有手动门控,因此持续部署在很大程度上都得依赖精心设计的测试自动化。
实际上,持续部署意味着开发人员对应用的更改在编写后的几分钟内就能生效(假设它通过了自动化测试)。这更加便于持续接收和整合用户反馈。总而言之,所有这些 CI/CD 的关联步骤都有助于降低应用的部署风险,因此更便于以小件的方式(而非一次性)发布对应用的更改。不过,由于还需要编写自动化测试以适应 CI/CD 管道中的各种测试和发布阶段,因此前期投资还是会很大。
GitLab CI / CD 使用
使用GitLab CI / CD,你只需要在Git存储库的代码库中根目录添加
.gitlab-ci.yml
文件,并在文件中指定构建,测试和部署。
.gitlab-ci.yml文件告诉Runner。一个管道通常分为三个阶段:
- build (编译)
- test(测试)
- deploy(部署)
对应文件写入
stages:
# 编译
- build
# 测试
- test
# 部署
- deploy
执行任务 script
script是工作所需的唯一必需关键字。这是由Runner者执行的shell脚本。例如:
job:
script: "bundle exec rspec"
- uname -a # 执行脚本
- uname -a # 可以添加多行
stage
stage是按工作定义的,并依赖于stages全局定义的。它允许将作业分为不同的阶段,并且相同的作业 stage可以并行执行(取决于特定条件)。例如:
stages:
- build
- test
- deploy
job 0:
stage: .pre
script: make something useful before build stage
job 1:
stage: build
script: make build dependencies
job 2:
stage: build
script: make build artifacts
job 3:
stage: test
script: make test
job 4:
stage: deploy
script: make deploy
job 5:
stage: .post
script: make something useful at the end of pipeline
tags 标签
tags是标记当前脚本执行的标志 对应Runner tags 去执行当前脚本 如下
stage: .pre
tags:
- ios
script:
- swiftlint lint
最后这是完整的一份事例
stages:
- build
- test
- deploy
stage_pre:
# 任务之前所执行的操作
# 检查代码格式
stage: .pre
tags:
- ios
script:
- swiftlint lint
stage_build:
# 编译代码 检查错误
stage: build
tags:
- ios
script:
- pod install
- 'xcodebuild build -workspace FBB-Shop-iOS.xcworkspace -scheme FBB-Shop-iOS -destination "platform=iOS Simulator,name=iPhone 11"| tee xcodebuild.log | xcpretty -s'
stage_test:
# 执行单元测试
stage: test
tags:
- ios
script:
- pod install
- 'xcodebuild test -workspace FBB-Shop-iOS.xcworkspace -scheme FBB-Shop-iOS -destination "platform=iOS Simulator,name=iPhone 11"| tee xcodebuild.log | xcpretty -s'
stage_deploy:
# 部署到蒲公英
stage: deploy
tags:
- ios
script:
- pod install
- fastlane beta
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'