热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用GitLabCI的多个命名环境的相同步骤

如何解决《使用GitLabCI的多个命名环境的相同步骤》经验,为你挑选了2个好方法。

是否有配置多个具体名称的环境的方式(特别是test,stageprod)?

在他们的文档(https://docs.gitlab.com/ce/ci/environments.html)中,他们讨论了动态创建的环境,但它们都是基于提交的.

我的构建步骤对于所有这些步骤都是相同的,除了换掉slu ::

deploy_to_test:
    environment:
         name: test
         url: ${CI_ENVIRONMENT_SLUG}.mydomain.com
    scripts:
         - deploy ${CI_ENVIRONMENT_SLUG}

deploy_to_stage:
    environment:
         name: stage
         url: ${CI_ENVIRONMENT_SLUG}.mydomain.com
    scripts:
         - deploy ${CI_ENVIRONMENT_SLUG}

 deploy_to_prod:
    environment:
         name: prod
         url: ${CI_ENVIRONMENT_SLUG}.mydomain.com
    scripts:
         - deploy ${CI_ENVIRONMENT_SLUG}

有没有办法将其压缩成一组指令?就像是:

deploy:
    environment:
         url: ${CI_ENVIRONMENT_SLUG}.mydomain.com
    scripts:
         - deploy ${CI_ENVIRONMENT_SLUG}

Fliss Hou.. 13

除了提供的答案,我想添加另一种类似的方法来实现同样的东西,但它更灵活,而不是使用模板,然后在一个阶段合并它.

你可以做的是创建一个隐藏的密钥,但是这种格式,例如,

.login: &login |
  cmd1
  cmd2
  cmd3
  ...

然后你可以使用'*',星号,将它应用到不同的阶段,如:

deploy:
  stage: deploy
  script:
    - ...
    - *login
    - ...

bake:
  stage: bake
  script:
    - ...
    - *login
    - ...

结果相当于:

deploy:
  stage: deploy
  script:
    - ...
    - cmd1
    - cmd2
    - cmd3
    - ...

bake:
  stage: bake
  script:
    - ...
    - cmd1
    - cmd2
    - cmd3
    - ...

基于以下资源:https: //gitlab.com/gitlab-org/gitlab-ce/issues/19677#note_13008199

至于模板实现,它是"合并"的.根据我自己的经验,如果在合并模板后附加更多脚本,模板脚本将被覆盖.而且您不能一次应用多个模板.仅执行最后一个模板脚本.例如:

.tmp1: &tmp1
  script:
    - a
    - b

.tmp2: &tmp2
  script:
    - c
    - d

job1:
  <<: *tmp1
  <<: *tmp2
  stage: xxx

job2:
  <<: *tmp2
  stage: yyy
  script:
    - e
    - f

相同的结果是:

job1:
  stage: xxx
  script:
    - c
    - d

job2:
  stage: yyy
  script:
    - e
    - f

如果不确定语法正确性,只需将.gitlab.yml文件内容复制并粘贴到"CI Lint"进行验证.该按钮位于管道选项卡中.

gitlab gitlab-ci yaml



1> Fliss Hou..:

除了提供的答案,我想添加另一种类似的方法来实现同样的东西,但它更灵活,而不是使用模板,然后在一个阶段合并它.

你可以做的是创建一个隐藏的密钥,但是这种格式,例如,

.login: &login |
  cmd1
  cmd2
  cmd3
  ...

然后你可以使用'*',星号,将它应用到不同的阶段,如:

deploy:
  stage: deploy
  script:
    - ...
    - *login
    - ...

bake:
  stage: bake
  script:
    - ...
    - *login
    - ...

结果相当于:

deploy:
  stage: deploy
  script:
    - ...
    - cmd1
    - cmd2
    - cmd3
    - ...

bake:
  stage: bake
  script:
    - ...
    - cmd1
    - cmd2
    - cmd3
    - ...

基于以下资源:https: //gitlab.com/gitlab-org/gitlab-ce/issues/19677#note_13008199

至于模板实现,它是"合并"的.根据我自己的经验,如果在合并模板后附加更多脚本,模板脚本将被覆盖.而且您不能一次应用多个模板.仅执行最后一个模板脚本.例如:

.tmp1: &tmp1
  script:
    - a
    - b

.tmp2: &tmp2
  script:
    - c
    - d

job1:
  <<: *tmp1
  <<: *tmp2
  stage: xxx

job2:
  <<: *tmp2
  stage: yyy
  script:
    - e
    - f

相同的结果是:

job1:
  stage: xxx
  script:
    - c
    - d

job2:
  stage: yyy
  script:
    - e
    - f

如果不确定语法正确性,只需将.gitlab.yml文件内容复制并粘贴到"CI Lint"进行验证.该按钮位于管道选项卡中.

gitlab gitlab-ci yaml


@LeiYang在YAML中似乎`|`表示多行。但是,我实际上没有看到任何正式文档提到这种用法。有关更多信息,请参见[问题19677](https://gitlab.com/gitlab-org/gitlab-ce/issues/19677)。

2> fedorqui..:

是的,你可以使用锚点.如果我正确地遵循文档,您将使用隐藏密钥重写它.XX,然后应用它<<: *X.

例如,这可以定义密钥:

.job_template: &deploy_definition
    environment:
         url: ${CI_ENVIRONMENT_SLUG}.mydomain.com
    scripts:
         - deploy ${CI_ENVIRONMENT_SLUG}

然后可以使用所有块进行写入<<: *job_template.我假设environment将名称与预定义的URL合并.

deploy_to_test:
   <<: *deploy_definition
    environment:
         name: test

deploy_to_stage:
   <<: *deploy_definition
    environment:
         name: stage

 deploy_to_prod:
   <<: *deploy_definition
    environment:
         name: prod

上面链接中的完整文档部分:

YAML有一个名为"锚点"的便捷功能,可让您轻松复制文档中的内容.Anchor可用于复制/继承属性,是与隐藏键一起使用以提供作业模板的完美示例.

以下示例使用锚点和映射合并.它将创建两个作业test1和test2,它们将继承.job_template的参数,每个作业都定义了自己的自定义脚本:

.job_template: &job_definition  # Hidden key that defines an anchor named 'job_definition'
  image: ruby:2.1
  services:
    - postgres
    - redis

test1:
  <<: *job_definition           # Merge the contents of the 'job_definition' alias
  script:
    - test1 project

test2:
  <<: *job_definition           # Merge the contents of the 'job_definition' alias
  script:
    - test2 project

&设置锚点的名称(job_definition),<<表示"将给定的哈希值合并到当前的哈希值",*包括命名的锚点(job_definition).扩展版本如下所示:

.job_template:
  image: ruby:2.1
  services:
    - postgres
    - redis

test1:
  image: ruby:2.1
  services:
    - postgres
    - redis
  script:
    - test1 project

test2:
  image: ruby:2.1
  services:
    - postgres
    - redis
  script:
    - test2 project


完善.谢谢.
推荐阅读
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 本文介绍如何在Spring Boot项目中集成Redis,并通过具体案例展示其配置和使用方法。包括添加依赖、配置连接信息、自定义序列化方式以及实现仓储接口。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 本文详细探讨了在微服务架构中,使用Feign进行远程调用时出现的请求头丢失问题,并提供了具体的解决方案。重点讨论了单线程和异步调用两种场景下的处理方法。 ... [详细]
  • 本教程详细介绍了如何使用 TensorFlow 2.0 构建和训练多层感知机(MLP)网络,涵盖回归和分类任务。通过具体示例和代码实现,帮助初学者快速掌握 TensorFlow 的核心概念和操作。 ... [详细]
  • 深入解析:OpenShift Origin环境下的Kubernetes Spark Operator
    本文探讨了如何在OpenShift Origin平台上利用Kubernetes Spark Operator来管理和部署Apache Spark集群与应用。作为Radanalytics.io项目的一部分,这一开源工具为大数据处理提供了强大的支持。 ... [详细]
  • 请看|间隔时间_Postgresql 主从复制 ... [详细]
author-avatar
牛氏学道_246
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有