【基于 GitLab 的 CI/CD 实践】05、GitLab Pipeline 实践(下)

news2024/11/26 10:05:31

目录

needs 并行阶段

制品下载

include

local 引入本地配置

file 引入其他项目配置

template 引入官方配置

remote 引入远程配置

extends 继承作业配置

extends & include

trigger 管道触发

多项目管道

父子管道

image

准备环境

services

environment

inherit


 

needs 并行阶段

可无序执行作业,无需按照阶段顺序运行某些作业,可以让多个阶段同时运行。

stages:
  - build
  - test
  - deploy

module-a-build:
  stage: build
  script: 
    - echo "hello3a"
    - sleep 10
    
module-b-build:
  stage: build
  script: 
    - echo "hello3b"
    - sleep 10

module-a-test:
  stage: test
  script: 
    - echo "hello3a"
    - sleep 10
  needs: ["module-a-build"]
    
module-b-test:
  stage: test
  script: 
    - echo "hello3b"
    - sleep 10
  needs: ["module-b-build"]

        如果 needs:设置为指向因 only/except 规则而未实例化的作业,或者不存在,则创建管道时会出现 YAML 错误。

        暂时限制了作业在 needs:可能需要的最大作业数分配,ci_dag_limit_needs 功能标志已启用(默认)分配 10 个,如果功能被禁用为 50。

Feature::disable(:ci_dag_limit_needs)   # 50
Feature::enable(:ci_dag_limit_needs)    # 10

制品下载

        在使用 needs,可通过 artifacts: true 或 artifacts: false 来控制工件下载。 默认不指定为 true。

module-a-test:
  stage: test
  script: 
    - echo "hello3a"
    - sleep 10
  needs: 
    - job: "module-a-build"
      artifacts: true

        相同项目中的管道制品下载,通过将 project 关键字设置为当前项目的名称,并指定引用,可以使用 needs 从当前项目的不同管道中下载工件。在下面的示例中,build_job 将使用other-ref ref 下载最新成功的 build-1 作业的工件:  

build_job:
  stage: build
  script:
    - ls -lhR
  needs:
    - project: group/same-project-name
      job: build-1
      ref: other-ref
      artifacts: true

不支持从 parallel: 运行的作业中下载工件。  

include

        可以允许引入外部 YAML 文件,文件具有扩展名 .yml 或 .yaml。使用合并功能可以自定义和覆盖包含本地定义的 CI / CD 配置。相同的 job 会合并,参数值以源文件为准。  

local 引入本地配置

        引入同一存储库中的文件,使用相对于根目录的完整路径进行引用,与配置文件在同一分支上使用。

ci/localci.yml: 定义一个作业用于发布。

stages:
  - deploy
  
deployjob:
  stage: deploy
  script:
    - echo 'deploy'

.gitlab-ci.yml 引入本地的 CI 文件 'ci/localci.yml'。

include:
  local: 'ci/localci.yml'
  

stages:
  - build
  - test
  - deploy
  

buildjob:
  stage: build
  script: ls
  
 
testjob:
  stage: test
  script: ls

file 引入其他项目配置

包含来自另一个项目的文件。

include:
  - project: demo/demo-java-service
    ref: master
    file: '.gitlab-ci.yml'

template 引入官方配置

只能使用官方提供的模板:lib/gitlab/ci/templates · master · GitLab.org / GitLab · GitLab 

include:
  - template: Auto-DevOps.gitlab-ci.yml

remote 引入远程配置

        用于通过 HTTP / HTTPS 包含来自其他位置的文件,并使用完整 URL 进行引用。远程文件必须可以通过简单的 GET 请求公开访问,因为不支持远程 URL 中的身份验证架构。

include:
  - remote: 'https://gitlab.com/awesome-project/raw/master/.gitlab-ci-template.yml'

extends 继承作业配置

继承模板作业。

stages:
  - test
variables:
  RSPEC: 'test'

.tests:
  script: echo "mvn test"
  stage: test
  only:
    refs:
      - branches

testjob:
  extends: .tests
  script: echo "mvn clean test"
  only:
    variables:
      - $RSPEC

合并后:

testjob:
  stage: test
  script: mvn clean test
  only:
    variables:
      - $RSPEC
    refs:
      - branches

extends & include

        这将运行名为 useTemplate 的作业,该作业运行 echo Hello! 如 .template 作业中所定义,并使用本地作业中所定义的 alpine Docker 镜像。 

定义一个 aa.yml:

deployjob:
  stage: deploy
  script:
    - echo 'deploy'
  only:
    - dev

.template:
  stage: build
  script: 
    - echo "build"
  only:
    - master
include:
  local: 'ci/localci.yml'

stages:
  - test
  - build 
  - deploy
  
variables:
  RSPEC: 'test'

.tests:
  script: echo "mvn test"
  stage: test
  only:
    refs:
      - branches

testjob:
  extends: .tests
  script: echo "mvn clean test"
  only:
    variables:
      - $RSPEC
      

newbuildjob:
  script:
    - echo "123"
  extends: .template

trigger 管道触发

        当 GitLab 从 trigger 定义创建的作业启动时,将创建一个下游管道。允许创建多项目管道和子管道。将 trigger 与 when:manual 一起使用会导致错误。

        多项目管道:跨多个项目设置流水线,以便一个项目中的管道可以触发另一个项目中的管道。[微服务架构]

        父子管道:在同一项目中管道可以触发一组同时运行的子管道,子管道仍然按照阶段顺序执行其每个作业,但是可以自由地继续执行各个阶段,而不必等待父管道中无关的作业完成。

多项目管道

        当前面阶段运行完成后,触发 demo/demo-java-service 项目 master 流水线。创建上游管道的用户需要具有对下游项目的访问权限。如果发现下游项目用户没有访问权限以在其中创建管道,则 staging 作业将被标记为失败

staging:
  variables:
    ENVIRONMENT: staging
  stage: deploy
  trigger: 
    project: demo/demo-java-service
    branch: master
    strategy: depend

  project 关键字,用于指定下游项目的完整路径。该 branch 关键字指定由指定的项目分支的名称。使用 variables 关键字将变量传递到下游管道。 全局变量也会传递给下游项目。上游管道优先于下游管道。如果在上游和下游项目中定义了两个具有相同名称的变量,则在上游项目中定义的变量将优先。默认情况下,一旦创建下游管道,trigger 作业就会以 success 状态完成。strategy: depend 将自身状态从触发的管道合并到源作业。  

在下游项目中查看管道信息:

在此示例中,一旦创建了下游管道,该 staging 将被标记为成功。  

父子管道

创建子管道 ci/child01.yml:

stages:
  - build

child-a-build:
  stage: build
  script: 
    - echo "hello3a"
    - sleep 10

在父管道触发子管道:

staging2:
  variables:
    ENVIRONMENT: staging
  stage: deploy
  trigger: 
    include: ci/child01.yml  
    strategy: depend

image

准备环境

        这次我们在学习语法时候需要准备一个注册 docker 执行器类型的 runner。可以参考以下命令指定:(根据实际情况修改)  

sudo gitlab-runner register \
  --non-interactive \
  --url "http://192.168.170.133/" \
  --registration-token "GR1348941sUxNyye1qD4HcTSW-TMw" \
  --executor "docker" \
  --docker-image alpine:latest \
  --description "docker-runner" \
  --maintenance-note "Free-form maintainer notes about this runner" \
  --tag-list "docker,aws" \
  --run-untagged="true" \
  --locked="false" \
  --access-level="not_protected"

修改 docker-runner 拉取策略:

[root@run01 /home/gitlab-runner]# vim /etc/gitlab-runner/config.toml
······
[[runners]]
  name = "docker-runner"
  url = "http://192.168.170.133/"
  id = 3
  token = "F9JvXdw6AW4zoNsxRGaD"
  token_obtained_at = 2023-07-19T07:06:45Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    pull_policy = "if-not-present"    # 增加这一行即可
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0

最后在 GitLab-Runner 机器上安装 Docker:【云原生 | Docker 基础篇】02、CentOS 7 安装 Docker 详细图文教程_centos7安装docker_Stars.Sky的博客-CSDN博客        image 语法:默认在注册 runner 的时候需要填写一个基础的镜像,请记住一点只要使用执行器为 docker 类型的 runner 所有的操作运行都会在容器中运行。 如果全局指定了 images 则所有作业使用此 image 创建容器并在其中运行。全局未指定 image,再次查看 job 中是否有指定,如果有此 job 按照指定镜像创建容器并运行,没有则使用注册 runner 时指定的默认镜像。  

#image: maven:3.6.3-jdk-8

before_script:
  - ls
  
  
build:
  image: maven:3.6.3-jdk-8
  stage: build
  tags:
    - docker
  script:
    - ls
    - sleep 2
    - echo "mvn clean "
    - sleep 10

deploy:
  stage: deploy
  tags:
    - docker
  script:
    - echo "deploy"

services

        工作期间运行的另一个 Docker 映像,并 link 到 image 关键字定义的 Docker 映像。这样,您就可以在构建期间访问服务映像.

        服务映像可以运行任何应用程序,但是最常见的用例是运行数据库容器,例如 mysql 。与每次安装项目时都安装 mysql 相比,使用现有映像并将其作为附加容器运行更容易,更快捷。

services:
  - name: mysql:latest
    alias: mysql-1

environment

声明所部署的环境名称和访问地址,后续可以直接在 gitlab 环境变量中查看。非常方便。

deploy to production:
  stage: deploy
  script: git push production HEAD:master
  environment:
    name: production
    url: https://prod.example.com

inherit

使用或禁用全局定义的环境变量(variables)或默认值(default)。

使用 true、false 决定是否使用,默认为 true

inherit:
  default: false
  variables: false

继承其中的一部分变量或默认值使用 list

inherit:
  default:
    - parameter1
    - parameter2
  variables:
    - VARIABLE1
    - VARIABLE2

上一篇文章:【基于 GitLab 的 CI/CD 实践】04、GitLab Pipeline 实践(中)_Stars.Sky的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/771376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文心一言 VS 讯飞星火 VS chatgpt (63)-- 算法导论6.5 2题

文心一言 VS 讯飞星火 VS chatgpt (63)-- 算法导论6.5 2题 二、试说明 MAX-HEAP-INSERT(A,10)在堆A(15,13,9,5,12,8,7,4,0,6&#xf…

XR应用云流化,多方面提升 XR 扩展现实体验!

无论是使用户能够协作设计电动赛车,还是帮助观众通过数字世界与自然互动,越来越多的企业利用XR扩展现实为用户提供沉浸式逼真的虚拟环境。 下一代沉浸式技术的应用越来越广泛,图形和人工智能的最新突破正在扩展XR的功能。这四种技术正在XR生态…

网络安全在2023好入行吗?

前言 023年的今天,慎重进入网安行业吧,目前来说信息安全方向的就业对于学历的容忍度比软件开发要大得多,还有很多高中被挖过来的大佬。 理由很简单,目前来说,信息安全的圈子人少,985、211院校很多都才建…

K12351 生日日期

题目描述 小科的生日是YY年MM月DD日,他想知道自己出生第10000天纪念的日期,出生日算第0天 输入格式 输入三个整数,分别表示YY,MM,DD,其中 1949≤YY≤2016 输出格式 输出小科身体第一万天以后的日期,格式为YY-MM-DD 输入输出…

Jmeter+Maven+jenkins+eclipse搭建自动化测试平台

背景: 首先用jmeter录制或者书写性能测试的脚本,用maven添加相关依赖,把性能测试的代码提交到github,在jenkins配置git下载性能测试的代码,配置运行脚本和测试报告,配置运行失败自动发邮件通知&#xff0c…

Docker 基本管理与应用

目录 一、Docker介绍 1、docker概述 2、容器优势 3、Docker与虚拟机的区别 4、Docker核心概念 二: 安装 Docker 1、环境准备、安装依赖包 2、 设置阿里云镜像源,安装 Docker-CE并设置为开机自动启动 3、信息查看 ​三:Docker 镜像操作…

AHB协议理解

目录 Chapter1 AHB Block Diagram Ginput signal lnput signals Output Signal Chapter3 Transfers AHB接口Overview Chapter6 Data Buses HWDATA HRDATA Chapter1 Introduction AHB: Advanced High-performance Bus ( 高级高性能总线 ) 应用场景:针对高效率&#…

cancal报错 config dir not found

替换classpath中间封号两边的值

这款录音转文字工具让你的录音转写更加便捷

小明:小李,最近我一直在做一个听力练习,但是听力材料都是录音,手动转写真的好慢,有什么办法可以提高录音转写效率吗? 小李:当然有啦!我之前也遇到过这种情况,最后我是通…

边缘检测之loG算子

note // 边缘检测之loG算子:对高斯函数求二阶导数 // G(x,y) exp(-1 * (x*x y*y) / 2 / sigma / sigma) // loG(x,y) ((x*x y*y - 2 * sigma * sigma) / (sigma^4)) * exp(-1 * (x*x y*y) / 2 / sigma /sigma) /* [ 0,0,-1,0,0; 0,-1,-2,-1,0; -1,-2,16,-2…

『红外图像 数据增强』DDE(Digital Detail Enhancement)算法

DDE处理的细节 分离背景层和细节层:使用特殊的滤波器,将图像分成背景层和细节层。背景层通常包含低频信息,而细节层包含高频信息。 对背景层进行灰度增强:通过对背景层应用适当的灰度增强算法,提高背景层的对比度和视…

数据结构(王道)——数据结构之 二叉树的存储结构

一、顺序存储 静态顺序存储 顺序存储的二叉树结构特性: 顺序存储的非完全二叉树特性 不完全二叉树的可能会浪费大量空间,所以一般顺序存储二叉树比较少用。 图示为什么很少用顺序存储来存二叉树 顺序存储的二叉树总结: 二、链式存储 二叉链表…

MYSQL数据库-数据库的学习

MYSQL数据库-数据库的学习 MYSQL数据库一、数据库的基本概念二、常见的数据库三、MySQL数据库四、SQL操作五、SQL高级操作六、SQL函数(SQL 拥有很多可用于计数和计算的内建函数) MYSQL数据库 一、数据库的基本概念 1、数据库的英文单词:DataBase 简称 : DB 2、什么…

浙大数据结构第四周之04-树6 Complete Binary Search Tree

题目详情: A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the nodes key.The right subtree of a node contains only nodes w…

2023软件测试八股文,拿下满意的offer就靠这了

前言 2023年软件测试行业就业越来越严峻,金三银四也成了铜三铁四,内卷成为了软件测试领域的代名词。 深圳,我的一个HR朋友告诉我,软件测试由于门槛低,现在普通测试岗(偏功能)的投递太多了&…

如何把本地项目的代码上传到 GitHub 上(详解)

此教程适用于已经安装 git ,并且已经注册 GitHub 账号的电脑,如果没有下载 git ,或者还没有注册过 GitHub 账号的,可以找相关教程弄一下。下面直接开整 说明:这里的案例就用我之前写的一个前端页面(内蒙古招…

04 QT坐标系

在QT中默认左上角为原点,即(0,0)点。x轴右侧为正方向,y轴以下侧为正方向

【1++的C++初阶】之vector

👍作者主页:进击的1 🤩 专栏链接:【1的C初阶】 文章目录 一,什么是vector?二,构造与析构三,vector迭代器的实现四,vector部分重要接口的实现 一,什么是vector? vector…

curl操作

下载路径:https://curl.se/windows/ 参考:https://blog.csdn.net/weixin_45191386/article/details/130652821 操作: curl http://localhost:8085/api/v1/aaa/bbbb/?ccc 652781344055627776

Android应用启动全流程分析(源码深度剖析)

作者:努比亚技术团队 源码来源:努比亚技术团队 1.前言 从用户手指点击桌面上的应用图标到屏幕上显示出应用主Activity界面而完成应用启动,快的话往往都不需要一秒钟,但是这整个过程却是十分复杂的,其中涉及了Android系…