前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Gitlab流水线中对部署进行控制?

如何在Gitlab流水线中对部署进行控制?

作者头像
DevOps云学堂
发布2020-07-27 16:04:29
1.8K0
发布2020-07-27 16:04:29
举报
文章被收录于专栏:DevOps持续集成DevOps持续集成

让我们看一下如何使用受保护的环境来设置生产部署和流水线的访问控制。这个功能目前在Gitlab Silver / Premium版本可用。

在我们的自动化世界中,为什么要手动做一些事情?手动几乎已成为低效率的代名词。但是,对于CI/CD管道,正确的配置手动作业可能是控制部署并满足合规性要求的好方法。让我们看一下如何定义手动作业以服务于两个重要的场景:控制谁可以去部署,设置手动批准作业。

部署环境保护

部署到生产环境是一项非常关键的任务,我们应该加以保护。具有Kubernetes集群的项目可以从迁移到持续部署(CD)模型中受益,在该模型中,分支或合并请求一旦合并,就会自动部署到生产中,并且无需人工干预。但是,对于尚未配置CD的项目,让我们考虑以下场景:想象一个带有手动作业的管道,该手动作业可以控制产品部署,任何有权访问提交代码的用户都可以触发该管道,可以想象生产部署的意外风险是非常大的。

幸运的是,可以使用受保护的环境来防止任何人都能部署到生产环境。在配置受保护的环境时,您可以定义授予部署访问权限的角色,组或用户。然后,可以在手动作业中定义受保护的环境以进行部署,从而限制可以运行它的人员。配置如下所示:

代码语言:javascript
复制
deploy_prod:
  stage: deploy
  script:
    - echo "Deploy to production server"
  environment:
    name: production
    url: https://example.com
  when: manual
  only:
    - master

在上面的示例中,关键字environment用于引用受保护的环境(在项目设置中配置),该环境包含可以运行作业的用户列表,在这种情况下,该用户可以将产品部署到指定的环境。没有访问权限的用户将看到禁用的按钮,并且无法执行作业。

添加批准步骤

可能会指定工作流中的某些活动需要批准后才能运行,即使从技术上讲它们本身并不是部署步骤。在此场景中,还可以在流水线中添加批准步骤,以提示授权用户采取措施以继续。这可以通过approve阶段来实现,例如,在部署之前插入批准阶段,如下所示:

代码语言:javascript
复制
stages:
  - build
  - approve
  - deploy

build:
  stage: build
  script:
    - echo Hello!

approve:
  stage: approve
  script:
    - echo Hello!
  environment:
    name: production
    url: https://example.com
  when: manual
  allow_failure: false
  only:
    - master

deploy:
  stage: deploy
  script:
    - echo Hello!
  environment:
    name: production
    url: https://example.com
  only:
    - master

在上面的YAML中,allow_failure: false (将手动作业定义为阻断),这将导致Pipeline暂停,直到授权用户通过单击开始按钮以继续进行批准为止。只有该环境列表的用户部分才能执行此操作。在这种情况下,以上示例CI配置中管道的UI视图将如下所示:

如上面的YAML示例和上图所示,使用受保护的环境和阻止属性定义的手动作业是处理合规性需求以及确保对生产部署进行适当控制的有效工具。

扩展内容

什么是GitOps?

从概念上讲,GitOps与用代码描述基础设施或持续交付没有什么不同。实际上,在许多方面,是这两个概念的融合。开发人员和运营团队都可以共享一个通用的代码存储库,而GitOps则可以为开发人员提供类似的管理应用程序及其底层基础架构的体验。这样,您可以将GitOps用作现代基础架构(如Kubernetes,Serverless和其他云原生技术)的操作模型。

版本控制和持续集成是持续可靠地部署软件的基本工具。GitOps通过使存储库成为运行应用程序所需的所有基础架构的真实来源,将这两种软件最佳实践投入运营。使用GitOps,对基础架构的任何更改都会与应用程序的更改一起提交到git存储库。

这使开发人员和运维人员可以使用熟悉的开发模式和分支策略。合并请求提供了协作和建议更改的场所。合并到主干后,应配置CI/CD以自动部署应用程序和基础架构更改。这是开发人员和运维人员之间实现同步的方式,对于作为DevOps的下一个迭代的GitOps来说,可能会非常吸引人。

为什么选择GitOps?

为什么这么多大小的组织都在考虑转向更注重GitOps的文化?

随着软件吞噬了世界,卓越的业务运营已与快速交付高质量软件的能力直接挂钩。业务生存取决于适应性和高效的软件开发实践。这些实践需要新的流程和变更管理方式。随着GitOps将这一概念进一步发展,并将管道直接集成到git和合并请求工作流程中,将其集成到生产中,这已成为一个热门话题,并将成为高效软件组织的常规工作流程。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps云学堂 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 部署环境保护
  • 添加批准步骤
  • 扩展内容
    • 什么是GitOps?
      • 为什么选择GitOps?
      相关产品与服务
      持续集成
      CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档