• GitLab CI/CD之gitlab-ci.yml的介绍与简单编写(P3-P4)


    1.Gitlab ci/cd两大要素

    gitlab runner

    gitlab-ci.yml

    2. .gitlab-ci.yml基本关键词

    script, after_script, allow_failure, artifacts, before_script, cache, coverage, dependencies, environment, except, extends, image, include, interruptible, only, pages, parallel, release, resource_group, retry, rules, services, stage, tags, timeout, trigger, variables, when

    常用关键词

    自己定义stages
    
    
    • 1
    • 2

    stage

    • job内部的关键词

    • 任务内的阶段,必须从全局阶段stages中选,stage定义了job运行在哪个stage

    • 运行的顺序是按照阶段里面定义的顺序去执行,而不是你写的顺序去执行
      阶段的顺序如下:
      在这里插入图片描述

    • 下面是默认的stage

    job1:
      stage: .pre
      script:
        - echo "This job compiles code."
    
    job2:
      stage: build
      script:
        - echo "This job compiles code."
    
    job3:
      stage: test
      script:
        - echo "This job compiles code."
    
    job4:
      stage: test
      script:
        - echo "This job compiles code."
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 测试:相同名字的stage没有并发执行的原因是:gitlab runner的配置问题,默认配置是每一条流水线只能有一个任务去并发的执行
      在这里插入图片描述

    stages

    • 全局自定义阶段
    • 全局关键词
    • 先运行stage1对应的job1的任务,接着运行stage2对应的job2的任务
    stages:
    	- stage1
    	- stage2
    	- stage3
    
    job1:
      stage: stage1
      script:
        - echo "This job compiles code."
    
    job2:
      stage: stage2
      script:
        - echo "This job compiles code."
    
    job3:
      stage: stage3
      script:
        - echo "This job compiles code."
    
    job4:
      stage: stage3
      script:
        - echo "This job compiles code."
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 测试:
      在这里插入图片描述

    script

    • 被Runnable执行的shell脚本,执行多行的shell脚本
    • stages中定义的stage会去下面的job1,job2中去选
    stages:
    	- stage1
    	- stage2
    	- stage3
    	- deploy
    	- clean
    
    job1:
      stage: stage1
      script:
        - echo "This job compiles code."
        - echo 'my job1'
    
    job2:
      stage: stage2
      script:
        - echo "This job compiles code."
    
    job3:
      stage: stage3
      script:
        - echo "This job compiles code."
    
    job4:
      stage: stage3
      script:
        - echo "This job compiles code."
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 测试:
      在这里插入图片描述

    retry

    test:
      script: rspec
      retry: 2
    
    • 1
    • 2
    • 3

    only/except

    • 限定当前任务执行的条件
    • only / except
    • only/except 是规定当前job的可见状态,一个项目有很多分支,tag,我们的流水线,为了对特定的分支,特定的tag执行不同的job,这里就要使用only和except
    • 在任务上加上这一段代码,就表明当前任务只有在master分支可以运行
    only:
      - master
    
    • 1
    • 2
    • 也可以根据当前的代码变动是合并,还是推送,还是使用API来触发的。
    • 如果一个任务没有only属性,那默认就是
    only: ['branches', 'tags'] 操作分支或者tags都会触发流水线。
    
    • 1

    images

    • 指定一个基础Docker镜像作为基础运行环境,经常用到的镜像有node nginx docker
    • 可以定义到全局,也可以定义到某个具体的任务

    tags

    • tags 关键词是用于指定Runner,tags的取值范围是在该项目可见的runner tags中
      在这里插入图片描述
      项目中可用的Runners
      在这里插入图片描述
      可用的runners有2个,tag有4个
      在这里插入图片描述

    • 只能定义到某个具体的任务上面

    • 指定流水线运行的Runner,每个环境可能有多个Runner,需要指定一个Runner去运行

    when

    • when关键字是实现在发生故障或尽管发生故障时仍能运行的作业。
    on_success 所有任务执行成功后
    on_failure 当至少一个任务失败后
    always 执行作业,而不考虑作业在早期阶段的状态。
    manual 手动执行任务
    delayed 延迟执行任务
    never
    在rules中不排除执行的任务
    在workflow:rules不允许的流水线
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    cache

    • 缓存是将当前工作环境目录中的一些文件,一些文件夹存储起来,用于在各个任务初始化的时候恢复。

    3.例子

    • yml文件按照缩进进行解析的,所以需要注意缩进问题
    #解决npm not found问题
    image node:alpine
    
    stages:
    	- intall
    	- build
    	- deploy
    
    #解决npm run build时,vite: not founcd问题,因为会删除掉node_modules目录
    ##每个job执行完毕后,都会缓存paths中的内容
    cache:
    	key: vitepro
    	paths:
    		- node_modules
    		- index.html
    	
    
    #安装nodejs的环境
    job_install:
    	stage: install
    	tags:
    		- dockercicd1
    	script:
    		- npm install
    
    job_build:
    	stage: build
    	tags:
    		- dockercicd1
    	script:
    		- npm run build
    	only:
    		- release
    
    job_deploy
    	stage: deploy
    	tags:
    		- dockercicd1
    	script:
    		- echo 'start deploy'
    	when: manual
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    artifacts用于指定在job 成功或失败 时应附加到作业的文件和目录的列表。

    • 作业完成后,工件将被发送到GitLab,并可在GitLab UI中下载
      在这里插入图片描述
    • eg:文件binaries和.config:
    artifacts:
        paths:
          - binaries/
          - .config
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    Spring Boot中集成Redis实现缓存功能
    Spring JDK动态代理(附带实例)
    技术干货 | 提速40%,MindSpore 二阶优化器技术解密!
    【软考 系统架构设计师】软件架构设计⑦ 构件与中间件技术
    golang 使用python脚本将pdf文件转为png图片
    python封装,继承,复写详解
    阅读文献小技巧
    12种算法优化CNN-BiGRU-Attention单变量输入单步预测,机器学习预测全家桶,持续更新,MATLAB代码...
    安装OCP集群
    文举论金:黄金原油全面走势分析策略独家指导
  • 原文地址:https://blog.csdn.net/u011436427/article/details/126695986