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

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

时间:2023-06-03 10:08:03浏览次数:47  
标签:制品 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 文件,运行该流水线,查看结果

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

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

但有时候我们不想每个阶段都初始化仓库,例如上面的 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

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

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

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

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

制品 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: []  # 不使用任何阶段的制品

运行流水线,查看结果

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

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

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




标签:制品,GIT,--,gitlab,ls,build,test,CHECKOUT,stage
From: https://blog.51cto.com/busy/6407503

相关文章

  • gitlab--不同的 stage 不重新下载代码、GIT_CHECKOUT、制品 artifacts
    介绍在gitlabci中,不同的stage都会重新下载代码,例如下面的.gitlab-ci.ymldefault:image:ruby:2.7.5stages:#运行的阶段顺序-build-test-deploybuild:#job的名称stage:build#阶段的名称script:-ls-l-echo123>test1.txt#在......
  • react配置API请求代理
    需求当请求http://10.1.1.1:3131/v1/*接口时,需要代理到8181端口。如果只需要代理匹配到/v1路径的请求,可以在package.json中使用http-proxy-middleware进行自定义代理配置。以下是一个示例:首先,确保已经安装了http-proxy-middleware包。如果没有安装,可以使用以下命令进行安......
  • react初始化项目
    初始化基础的项目npminstall-gcreate-react-appcreate-react-appmy-appcdmy-appnpmstart箴言:因为这些东西是非常简单的。不要抱怨自己学不会,那是因为你没有足够用心。......
  • The 'Access-Control-Allow-Origin' header contains multiple values'*, *', but onl
    报错内容The'Access-Control-Allow-Origin'headercontainsmultiplevalues'*,http://192.168.237.131',butonlyoneisallowed.Havetheserversendtheheaderwithavalidvalue,or,ifanopaqueresponseservesyourneeds,setthereque......
  • React 配置文件 | 配置本地IP地址和端口号
    问题create-react-app默认端口号是3000,当有的别的项目占用该端口号时自己想使用别的端口号时方法1、更改node_modulesa.依次打开“node_modules”—“react-scripts”—“scripts”文件夹,找到并打开start.js文件;b.在start.js文件中查找并修改“DEFAULT_PORT”项的端口值即可。2......
  • Mapbox样式配置之过滤器表达式
    需求如一个图层,有个属性字段m,值可能有1,2,3,我想等于1和2的时候给红色,等于3的时候给黄色。解决办法在Mapbox中,你可以使用样式表(Style)来配置图层的样式,包括根据属性字段值来设置不同的颜色。以下是一个示例,演示如何根据属性字段m的值设置图层的颜色:{"version":8,"source......
  • #私藏项目实操分享#
    在学习、比赛、工作中,项目实操和BUG修复是关键的环节,能帮助我们提高技能、积累经验并优化解决问题的能力。以下是一些建议:准备阶段:a.了解项目需求:阅读相关文档、研究目标领域的知识,确保对项目有充分的了解。b.规划时间表:为项目分配时间,确保项目的按时完成。c.编写详细的项......
  • #WPS AI# 改正病句
    首先,我们不能用汉语八级考试题去要求AI,有些活人都理解不了。而一些正常的修改,可以说非常赞!比如“眼前的场景壮观到不象话”,单纯从语法的角度来说,不能用“不象话”来形容一个场景的壮观程度,但是这三个字却能增加语感,AI在修改的过程中,接受了增加语感的用词,仅把错误的“象话”更正为正......
  • #WPS AI# 有了AI,我们真的就可以“为所欲为”了?
    先讲两个故事。故事一:一群志同道合的同学决定合作写一本约700页的书,其中一个同学花了十几分钟的时间做了个Word模板,又花了不到半小时的时间给大家培训了一下模板的使用方法,然后大家就各自去写了。三个月后,图书出版。在这个故事中,所有排版的时间加起来,不超过一小时。故事二:某同学决......
  • #WPS AI# 文章大纲
     以下全文:1.认识表格中的函数1.1.了解常见的表格函数类型1.2.掌握表格函数的应用场景1.3.掌握表格函数的应用步骤1.4.熟悉表格函数的适用范围1.5.探讨如何学习表格函数的方法1.6.实例分析如何用表格函数解决问题2.如何高效掌握表格函数2.1.制定合理的学习计划2.2.选择优......