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

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

介绍


在 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


相关文章
|
9月前
|
开发工具 git
使用Git根据日期进行代码版本切换的方法
通过以上步骤,可以有效地根据日期进行Git代码版本的切换。这种方法在需要回溯历史版本进行bug修复或功能复查时特别有用。Git的灵活性和强大功能使其成为现代软件开发不可或缺的工具之一。
936 103
|
数据可视化 Java 测试技术
Git Flow 现代实操指南含从代码提交到 CI/CD 全流程的实用技巧与长尾关键词解析 Git Flow
本指南结合现代技术趋势,详解Git Flow工作流,涵盖GitHub Actions自动化、Conventional Commits规范、Gitmoji可视化等内容,助你实现代码到CI/CD的全流程管理,提升团队开发效率与代码质量。
861 2
|
开发工具 git
使用Git下载指定版本或指定commit
使用Git下载指定版本或指定commit
|
开发工具 git 索引
如何使用Git的暂存区来管理代码更改?
如何使用Git的暂存区来管理代码更改?
1530 0
|
网络安全 开发工具 git
Git仓库创建与代码上传指南
本教程介绍了将本地项目推送到远程Git仓库的完整流程,包括初始化本地仓库、添加和提交文件、创建远程仓库、关联远程地址及推送代码。同时,还提供了`.gitignore`配置、分支管理等可选步骤,并针对常见问题(如认证失败、分支不匹配、大文件处理及推送冲突)给出了解决方案。适合初学者快速上手Git版本控制。
|
JavaScript 前端开发 持续交付
实际工作中 Git Commit 代码提交规范是什么样的?
实际工作中 Git Commit 代码提交规范是什么样的?
1246 7
|
Devops Shell 网络安全
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
891 16
git使用之如何将一套代码同时推送至github|gitee|gitcode|gitlab等多个仓库-含添加ssh-优雅草央千澈完美解决-提供整体提交代码
|
JavaScript 前端开发 开发工具
一身反骨的我,用--no-verify绕开了git代码提交限制!
【10月更文挑战第7天】一身反骨的我,用--no-verify绕开了git代码提交限制!
1782 0
|
开发工具 git
git如何修改提交代码时的名字和邮箱?
git如何修改提交代码时的名字和邮箱?
6866 4
|
Java Linux 开发工具
IDEA中git提交前如何关闭code analysis以及开启格式化代码
【10月更文挑战第12天】本文介绍了在 IntelliJ IDEA 中关闭代码分析和开启代码格式化的步骤。关闭代码分析可通过取消默认启用检查或针对特定规则进行调整实现,同时可通过设置 VCS 静默模式在提交时跳过检查。开启代码格式化则需在 `Settings` 中配置 `Code Style` 规则,并通过创建 Git 钩子实现提交前自动格式化。
6815 3