首页 > 其他分享 >gitlab--不同的 stage 不重新下载代码、GIT_CHECKOUT、制品 artifacts

gitlab--不同的 stage 不重新下载代码、GIT_CHECKOUT、制品 artifacts

时间:2023-05-29 23:13:49浏览次数:75  
标签:制品 GIT -- gitlab ls build test CHECKOUT stage

介绍

在 gitlab ci 中,不同的 stage 都会重新下载代码,例如下面的 .gitlab-ci.yml

default:
  image: ruby:2.7.5

stages: # 运行的阶段顺序
  - build
  - test
  - deploy

build: # job 的名称
  stage: build # 阶段的名称
  script:
    - ls -l
    - echo 123 > test1.txt # 在 build 阶段创建了一个 test1.txt 文件,写入了 123
    - ls -l

test:
  stage: test
  script:
    - ls -l


deploy:
  stage: deploy
  script:
    - echo "This job deploys something from the $CI_COMMIT_BRANCH branch."

我们在 build 阶段创建了一个 test1.txt 文件,运行该流水线,查看结果

但有时候我们不想每个阶段都初始化仓库,例如上面的 build 阶段构建完成之后会产生一些文件,而这些文件会在 test 阶段用到,这时候 test 阶段就不需要在初始化了

GIT_CHECKOUT

GIT_CHECKOUT 变量,默认值为 true,即每次运行 job 都下载代码,按照我们上面的需求,需要在 test 阶段禁止下载代码,我们将此变量的值在全局设置为 false,然后在第一个作业中设置为 true,也就实现了在第一个 job 中下载代码,在其他的 job 中不下载代码了

注意:使用 GIT_CHECKOUT 要保证不同的 stage 在同一个 runner 上运行

.gitlab-ci.yaml 如下

default:
  image: ruby:2.7.5

variables:
  GIT_CHECKOUT: "false"  # GIT_CHECKOUT 为 false,不下载代码

stages:
  - build
  - test
  - deploy

build:
  stage: build
  variables:
    GIT_CHECKOUT: "true"  # 下载代码
  script:
    - ls -l
    - echo 123 > test1.txt
    - ls -l

test:  # GIT_CHECKOUT 使用的是全局不,不下载代码
  stage: test  
  script:
    - ls -l


deploy:
  stage: deploy
  variables:
    GIT_CHECKOUT: "true" # 下载代码
  script:
    - ls -l

运行上面的流水线,查看效果

制品 artifacts

文档:https://docs.gitlab.cn/jh/ci/yaml/#dependencies

上面使用 GIT_CHECKOUT 要求 job 在同一个 runner 上运行,但在实际工作中,我们经常会在不同的 runner 上运行不同的 job,这时候就需要使用制品了。

制品的意思就是我们将某些文件保存起来,在需要用这些文件的地方,在下载就可以了

使用 artifacts 关键词可以将当前作业的一些文件存储起来,可以存储文件夹和文件列表。并且用户可以选择在作业失败,成功时或者总是存储文件。使用 artifacts 储存的文件将会被上传到 gitlab,开发者可以在 gitlab 上在线预览他们。存储后的文件将会在下一个阶段自动恢复到当前的工作目录。开发者也可以自由配置恢复哪些制品,不恢复哪些制品。被恢复的制品,存放的位置与以前一致

dependencies:要获取哪些作业制品,作业列表。只能是当前阶段之前的作业,如果空数组则跳过下载任何文件。不考虑先前作业的状态,因此,如果它是失败或者未运行的手动作业,则不会发生错误

如果您不使用 dependencies,则前一阶段的所有产物都会传递给每个作业

 

.gitlab-ci.yml 使用制品如下

default:
  image: ruby:2.7.5

stages:
  - build
  - test
  - deploy

build:
  stage: build
  script:
    - ls -l
    - echo 123 > test1.txt
    - ls -l
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME" # 创建制品存档的名称
    when: on_success  # 制品何时进行收集
    expire_in: "1 week"  # 制品的过期时间,过期自动清理
    paths:  # 定义要收集的制品文件或者目录信息
      - test1.txt

test:
  stage: test
  script:
    - ls -l
  dependencies:  # 只使用 build 阶段产生的制品,不写 dependencies 默认会下载所有阶段产生的制品
    - build

deploy:
  stage: deploy
  script:
    - ls -l
  dependencies: []  # 不使用任何阶段的制品

运行流水线,查看结果

我们也可以使用制品库:https://www.cnblogs.com/zouzou-busy/p/16759180.html

标签:制品,GIT,--,gitlab,ls,build,test,CHECKOUT,stage
From: https://www.cnblogs.com/zouzou-busy/p/16485401.html

相关文章

  • 简单control net 使用,建筑风格重新生成
    原图生成海景房方法:启用controlnetAnnotatorresolution(分辨率)可以调小一点预处理器:边缘检测cannymodel:canny-fp16正向提示词: masterpiece,bestquality,building,seaviewroom反向提示词:worstquality,lowquality,normalquality,lowres ......
  • 20、Ubuntu联网(NAT方式)
    一、配置NAT模式连接外网:然后打开VMware左上角‘编辑’-->‘虚拟网络设置’。可以看到NAT模式的名称是‘VMnet8’,点击一下这个模式,然后点击一下‘更改设置’。勾选‘NET模式’、‘将主机虚拟适配器连接带此网络’和‘使用本地DHCP服务将IP地址分配给虚拟机’,注意这个子网ip地......
  • 在统计学和机器学习中,常见的误差类型
    在统计学和机器学习中,常见的误差类型包括以下几种:1.随机误差(RandomError):随机误差是由于测量或观测过程中的不确定性引起的。它是无法避免的,通常表现为测量值或观测值的波动性。随机误差是独立的、不可预测的,并且在多次测量或观测中可以通过取平均值来减小其影响。2.系统误差(S......
  • for循环
    1.for循环式最有效,最灵活的循环方法。2.在idea中可以用的快捷键100.for==for(inti=0;i<100;i++){3.最先执行初始化步骤,可以声明一种类型,也可以初始化一个或多个循环控制变量,也可以是空语句。然后检查控制变量,true就执行,false就终止。再检测表达式,循环执行上面的过程。例题: ......
  • net6 使用 efcore 根据 mysql数据库生成代码
    1.vs中下载程序NuGet包Microsoft.EntityFrameworkCore.ToolsPomelo.EntityFrameworkCore.MySql 把这两个安装好就可以了或者你嫌麻烦也可以直接用命令下载 打开VS2019"工具"->"Nuget包管理器"->"程序包器管理控制台"PM>Install-PackageMicrosoft.EntityFrameworkCore.Too......
  • drf——jwt
    jwt原理使用jwt认证和使用session认证的区别三段式eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ#1.headerjwt的头部承载两部分信息:声明类型这里是jwt......
  • THUPC2023 游记
    之前有人说我这个赛季一年都没写过游记,刚好不想卷这次THU之行给我留下了很深印象,所以就来写篇游记浅浅记录一下。和Linshey,chen_03两位强神也是两位老队友组的队,队名叫「联合省选第一年」,源于我们省今年首次加入联合省选。顺带一提,去年我们的队伍名叫「最后的FJOIer」。5.2......
  • IntelliJ IDEA安装教程
    在安装编译器之前,有些人可能会疑惑是否需要安装Java环境。如果你使用的是IntelliJIDEA,那么你不需要手动安装Java环境,因为IDEA已经包含了Java开发所需的一切。除了Java环境,你还提到了Git和Maven。同样地,如果你使用的是IntelliJIDEA,你也不需要手动安装Git和Maven。IDEA已经......
  • 最近写的一些题目。
    1.H-卷王之王_牛客小白月赛36(nowcoder.com)首先你发现是对一个数字成倍的增加,所以每个数字他最多加32次。那么就可以考虑直接加就行,然后用一个优先队列存一下就行,每次取出最小的数即可。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongsignedmain()......
  • keepalive-haproyx高可用介绍
    假设我们现在开发了一个应用应用的端口号为8080,这个应用我们想让它去实现一个负载均衡的访问,就是说我们有两台服务器都部署了我们的8080应用,我们想让它一会访问ip为:192.168.0.1的,一会访问192.168.0.2的,我们之前的做法是不是在这两台服务器之上部署一台Nginx来进行实现......