云效 Pipeline as Code 来了!这些场景,用好它效率翻倍!

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 可视化与YAML编排兼具,云效CI/CD流水线你愿意打几分?

从可视化编排到支持 YAML 编排


云效流水线 Flow 是开箱即用的企业级持续集成和持续交付工具,支持丰富的代码源、构建、自动化测试工具、多种部署类型和部署方式,与阿里云深度集成,还提供多种企业级特性,助力企业高效完成从开发到上线 CICD 过程。


在业界,流水线产品通常有 2 种使用方式,一种是可视化界面操作,另一种是使用 YAML 语言像写代码一样编排流水线。


自 2020 年上线以来,云效 Flow 一直以其白屏化操作、开箱即用、简单易上手、与阿里云深度集成等特性,赢得了数万家企业的信赖。


去年,为了帮助企业解决多条流水线快速创建、批量管理、满足跳过/分支等复杂流程编排场景,云效全新上线了 Pipeline as Code 能力。企业可以用 YAML 方式创建流水线,基于云效提供的 YAML 模板,只需少量修改,就可以快速编排出满足业务场景的流水线。


简单几步就可以把 YAML 用起来


提到 YAML,不少同学首先想到的是使用门槛。云效 Flow 内置了丰富的 YAML 模板以及 YAML 手册,支持 YAML 语法自动补齐、实时校验并推荐修复方案,以及多种快捷键操作等,旨在帮助开发者降低 YAML 使用门槛,提升 YAML 编写效率。


1)内置丰富的流水线 YAML 模板

Flow 内提供了常用的流水线 YAML 模板,包含 Java、PHP、Node.js、Go、Python、.Net Core、C++ 等多种语言的常用构建、部署模板。新建流水线时,选择合适的 YAML 模板后,只需少量修改,就可以快速编排出满足业务场景的流水线。

image.png

2)提供常用任务 YAML 模板

一条流水线往往包含多个任务,Flow 提供了常用任务 YAML 模板,包含代码扫描、测试、构建、部署以及其他工具等。选择需要的任务步骤后,即可一键复制示例 YAML 到流水线中,快速编排流水线。

image.png

image.png

3)编辑器内置 YAML 手册,随手查阅

为了方便 YAML 的编写,云效 Flow YAML 编辑器内置了 YAML 手册,开发者可以一边编写 YAML,一边查阅手册。同时,YAML 手册开启自动定位,文档支持自动切换到鼠标光标定位的语法篇幅,做到随写随看,贴身“小抄”。

image.png

image.png

4)支持 YAML 语法自动补齐

不仅如此,YAML 编辑器还支持语法自动补齐,包括静态语法片段补齐、静态语法关键字补齐、动态资源 ID 等自动补齐(如构建集群 ID、主机组 ID、服务连接 ID 等),支持 Cmd + I 快捷键唤起自动补全。

image.png

image.png

5)支持 YAML 语法实时校验、推荐修复方案

Flow 的 YAML 编辑器还支持语法实时校验,支持代码行内实时展示错误标记,鼠标悬浮查看错误详情及修复方案。支持问题面板统一查看错误、错误原因、修复方案,以及错误行列坐标,点击错误就能自动定位到相关代码行。

image.png


这些场景用 YAML 更高效


1)快速复制 YAML 或调用 OpenAPI,轻松管理多条流水线

使用可视化方式操作流水线,当流水线多的时候,每条流水线修改起来比较复杂。有了 YAML 之后,开发者复制 YAML,只需做少量的修改,即可轻松配置多条流水线。


同时,基于 YAML ,云效提供了流水线创建、更新的 OpenAPI,企业可以调用这些 OpenAPI,轻松批量管理多条流水线,实现三方系统集成。


2)支持 condition 条件判断,满足跳过/分支等复杂流程编排场景

云效 Flow 流水线 YAML 支持 condition 控制某个 Job 是否执行,满足跳过、分支等复杂流程编排场景。典型场景示例如下:


分支场景:一次构建按需部署多环境

研发团队场景有多套测试环境,按需使用。可以根据指定环境名称按需部署到测试环境。

image.png


sources: 
  my_repo:
    type: gitSample
    name: 示例代码源
    endpoint: https://atomgit.com/flow-example/spring-boot.git
    branch: master
stages:
  build_stage:
    name: 构建
    jobs:
      build_job:
        name: 构建任务
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: |
                echo This is build job...
  deploy_stage:
    name: 部署测试环境
    jobs:
      deploy_job1:
        name: 部署测试环境一套
        # 根据指定环境名按需部署
        condition: |
          "${ENVNAME}" == "EVN1"
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: echo This is deploy env 1...
      deploy_job2:
        name: 部署测试环境二套
        # 根据指定环境名按需部署
        condition: |
          "${ENVNAME}" == "EVN2"
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: echo This is deploy env 2...


跳过场景:非窗口期发布需要额外审批;窗口期无需审批,直接跳过

生产发布场景,非发布窗口期需要人工审核、窗口期可以跳过人工审核。

image.png


sources: 
  my_repo:
    type: gitSample
    name: 示例代码源
    endpoint: https://atomgit.com/flow-example/spring-boot.git
    branch: master
stages:
  build_stage:
    name: 构建
    jobs:
      build_job:
        name: 构建任务
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: |
                echo This is build job...
  approve_stage:
    name: 审批
    jobs:
      approve_job:
        name: 人工卡点
        # 运行分支为 master 时执行审批任务,请替换为实际的审批判断条件
        condition: | 
          "${CI_COMMIT_REF_NAME}" == "master"    
        component: ManualValidate
        with:
          validatorType: users           # 验证者类型为企业成员,通过阿里云 ID 确定审核人员
          validateMethod: and            # 验证方式 and:会签(须所有审批人同意)or:或签(一名审批人同意或拒绝即可)
          validators: 
            - 290591284908846966         #通过阿里云控制台获取阿里云 ID
  deploy_stage:
    name: 部署
    jobs:
      deploy_job:
        name: 部署任务
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: echo This is deploy job...


跳过场景:前端应用未更新跳过构建,仅构建后端应用

某些前后端应用依赖场景,先构建前端应用生成静态文件、后端应用构建时引用前端静态文件,但并不是每个需求都涉及前端应用修改,则可根据条件判断前端应用是否需要构建。


示例中,使用流水线自定义环境变量 "${FRONT_APP_CHANGED}" == "true" 作为任务 condition 条件,变量值为 true 时执行前端应用构建,否则跳过。

image.png


sources: 
  my_repo:
    type: gitSample
    name: 示例代码源
    endpoint: https://atomgit.com/flow-example/spring-boot.git
    branch: master
stages:
  build_stage:
    name: 构建
    jobs:
      front_build_job:
        name: 前端应用构建
        # 根据自定义环境变量判断是否需要执行前端应用构建
        condition: |
          "${FRONT_APP_CHANGED}" == "true"
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: |
                echo This is front app build job...
      backend_build_job:
        name: 后端应用构建
        needs: front_build_job
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: |
                echo This is backend app build job...
  deploy_stage:
    name: 部署
    jobs:
      deploy_job:
        name: 部署任务
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: echo This is deploy job...


3)支持 needs 依赖设置,支持跨阶段并行执行,流程执行效率 up up

跨阶段依赖场景:多应用并行测试构建,app1 构建任务依赖 app1 单元测试和 app1 代码扫描任务都完成,app2 构建任务依赖 app2 单元测试和 app2 代码扫描任务都完成,app1 和 app2 之间测试和构建阶段无相互依赖可以并行执行,用于提升效率。

image.png


sources: 
  my_repo1:
    type: gitSample
    name: app1代码源
    endpoint: https://atomgit.com/flow-example/spring-boot.git
    branch: master
  my_repo2:
    type: gitSample
    name: app2代码源
    endpoint: https://atomgit.com/flow-example/node-expressjs.git
    branch: master
defaultWorkspace: my_repo1
stages:
  build_stage:
    name: 构建
    jobs:
      test_job1:
        name: app1单元测试
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: |
                echo This is test job1...
      scan_job1:
        name: app1代码扫描
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: |
                echo This is scan job1...
      test_job2:
        name: app2单元测试
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: |
                echo This is test job2...
      scan_job2:
        name: app2代码扫描
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: |
                echo This is scan job2...
      build_job1:
        name: app1构建
        # 声明依赖任务,app1构建依赖app1单元测试和代码扫描任务都完成
        needs: 
          - test_job1
          - scan_job1
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: |
                echo This is build job2...
      build_job2:
        name: app2构建
        # 声明依赖任务,app2构建依赖app2单元测试和代码扫描任务都完成
        needs: 
          - test_job2
          - scan_job2
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: |
                echo This is build job2...
  deploy_stage:
    name: 部署
    jobs:
      deploy_job1:
        name: app1部署
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: echo This is deploy env 1...
      deploy_job2:
        name: app2部署
        # 声明依赖任务,app2部署依赖app1部署任务完成
        needs: deploy_job1
        steps:
          command_step:
            name: 执行命令
            step: Command
            with:
              run: echo This is deploy env 2...


4)支持 template 语法,满足多个相同或类似逻辑 Job 批量配置场景

云效 Flow 支持使用 template 语法来动态渲染流水线 YAML,满足多个相同或类似逻辑 Job 批量配置场景,满足多 Job 按需动态生成场景,帮助降低流水线 YAML 重复代码,灵活编排多任务。同时,还支持使用 {{ }} 定义模板,遵循 go template 原生语法。


典型使用场景有:

  • 多操作系统、多 SDK 版本兼容性测试场景:遍历 ["linux", "windows"] 2 个操作系统、遍历 ["10", "11", "17"] 3 个 JDK 版本,使用 template 的 range 循环,生成 6 个相同逻辑的 Job。
  • 多应用动态按需构建部署:流水线配置多个应用代码源、多个应用构建任务、多个应用部署任务,一次迭代仅涉及部分应用更新,可根据运行时输入环境变量如 appnames 动态构建部署有修改的应用。


关于这部分能力,我们将在下篇文章中详细介绍。


云效 Flow 邀你来评测:

如果你对云效 Flow 的 Pipeline as Code 能力感兴趣,欢迎点击此处,参加云效 Flow 的评测活动,发布你对 Flow 的看法。


4 月 26 日 - 6 月 15 日期间,发布评测内容,将有机会获得如下奖励:

  • 参与奖:活动期间凡发布 200 字以上评测且通过审核的用户,可获 50 积分;
  • 争优奖:10 篇,活动期间评测文章被官方判定为“优”,将获得云效定制加薪水杯;
  • 潜力奖:5 篇,官方评定优质评测文章,获得里云积木星球 + 云效定制 T 恤 + 优质评测证书;
  • 最优奖:1 篇,官方评定最佳评测文章,获得小米手环 pro + 云效定制帆布包 + 优质评测证书 + 社区首页展示 1 周。

image.png

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
相关文章
|
5天前
|
Kubernetes 安全 Devops
【云效流水线 Flow 测评】驾驭云海:五大场景下的云效Flow实战部署评测
云效是一款企业级持续集成和持续交付工具,提供免费、高可用的服务,集成阿里云多种服务,支持蓝绿、分批、金丝雀等发布策略。其亮点包括快速定位问题、节省维护成本、丰富的企业级特性及与团队协作的契合。基础版和高级版分别针对小型企业和大规模团队,提供不同功能和服务。此外,云效对比Jenkins在集成阿里云服务和易用性上有优势。通过实战演示了云效在ECS和K8s上的快速部署流程,以及代码质量检测和AI智能排查功能,展示了其在DevOps流程中的高效和便捷,适合不同规模的企业使用。本文撰写用时5小时,请各位看官帮忙多多支持,如有建议也请一并给出,您的建议能帮助我下一篇更加出色。
216794 18
|
5天前
|
敏捷开发 测试技术 持续交付
云效产品使用常见问题之从私有gitlab上触发pipeline如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5天前
云效标签不是必填嘛,什么场景可以不添加。是指编排的时候?
云效标签不是必填嘛,什么场景可以不添加。是指编排的时候?
29 1
|
Kubernetes Cloud Native Dubbo
阿里云云效云原生DevOps解决方案:函数计算、K8S、微服务场景方案详解
为帮助更多企业和开发者高质量、低成本地享受技术升级带来的研发福利,云效联合云原生团队打造了一站式云原生DevOps解决方案,无论是通用K8s场景、Spring Cloud/Dubbo微服务场景、还是轻量级的函数计算场景,
阿里云云效云原生DevOps解决方案:函数计算、K8S、微服务场景方案详解
|
5天前
|
运维 Devops
云效产品使用报错问题之yaml流水线里的 ${CI_COMMIT_REF_NAME} 失效如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
云效产品使用报错问题之yaml流水线里的 ${CI_COMMIT_REF_NAME} 失效如何解决
|
5天前
|
运维 Devops 测试技术
云效产品使用报错问题之云效度量的缺陷累积流图,缺陷的“已完成”这条线未更新,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
5天前
|
运维 Kubernetes JavaScript
云效产品使用报错问题之gitlab库导入到云效失败如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
5天前
|
运维 Kubernetes JavaScript
云效产品使用报错问题之流水线发布uniapp的应用失败如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
5天前
|
缓存 Kubernetes Devops
云效产品使用报错问题之不知道云效api需要什么权限如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
5天前
|
运维 Devops API
云效产品使用报错问题之导不出来表格如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。