访次: AmazingCounters.com 次

八、gitlab--include 引入其他 ci 文件、extends 继成模板作业

 

 

 

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

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

在项目20240205下创建一个 目录,在里面创建一个 local_file.yml 文件,写入下面内容

stages:
  - deploy
  
deployjob:
  stage: deploy
  script:
    - echo '我是第一步的 deploy'

在根目录下的 .gitlab-ci.yml 里写入下面内容

stages:
  - build
  - deploy
  - test

include:
  local: 'ci/localci_file.yml' # 引用本项目相对路径下ci目录本地的文件,使用 local
  

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

运行流水线,查看流水线,可以看到引入的本地的 ci 文件也执行了

 

file
file 可以引用另一个项目下的文件

在 20240501-v1项目下创建一个 .gitlab-ci.yml 文件,写入下面内容

stages:
  - unit
  - deploy
  
  
deploy:
  stage: deploy
  script:
    - echo '我是项目 20240205-v1 项目下的 deploy'

unit:
  stage: unit
  script:
    - echo '我是项目 20240205-v1 项目下的 unit'

 在项目20240205中引入 20240205-v1项目下 /ci/.gitlab-ci.yml 文件

stages:
  - build  # 本项目的job
  - deploy # 引用另一个项目的job
  - test   # 本项目的job
  - unit   # 引用另一个项目的job

include:
  #local: 'ci/localci_file.yml' # 引用本项目相对路径下ci目录本地的文件,使用 local
  - project: root/20240205-v1 # 项目路径,到项目就可以,不需要到项目下的目录
    ref: main # 分支
    file: 'ci/.gitlab-ci.yml' # 具体的文件

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

project 对应的是下面的这里的

 查看流水线

 

template
只能使用官方提供的模板  https://gitlab.com/gitlab-org/gitlab/tree/master/lib/gitlab/ci/templates

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

在 gitee 创建个项目,在里面创建一个 .gitlab-ci.yml 文件

 

stages:
  - unit
  - deploy
  
  
deploy:
  stage: deploy
  script:
    - echo 'my is gitee deploy'

unit:
  stage: unit
  script:
    - echo 'my is gitee unit'

 获取文件地址

 

 

然后在 gitlab 里创建20240205-v2 项目 引用 gitee 远程 .gitlab-ci.yml 文件地址

stages:
  - build # 本地项目 JOB
  - deploy  # 远程 项目 JOB  https://gitee.com/stud_1/test/raw/master/.gitlab-ci.yml
  - unit   # 远程 项目 JOB  https://gitee.com/stud_1/test/raw/master/.gitlab-ci.yml
  - test # 本地项目 JOB

include:
  - remote: 'https://gitee.com/stud_1/test/raw/master/.gitlab-ci.yml' # 引入远程的 ci 文件?

  

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

 

 

extends
extends 用来继成模板,如果源文件有的,会覆盖模板里的,源文件里没有的,会继承模板里的

例如下面的

stages:
  - build
  - test

.test: # 模板以 . 开头
  stage: test
  before_script:
    - echo "我是 .test 模板 before_script"
  script:
    - echo "我是 .test 模板 的 script"
  

buildjob:
  stage: build
  script: ls
  
 
testjob:
  extends: .test # 继承 .test 模板,有的会覆盖模板里的,没有的会继承
  before_script:
    - echo "我是在模板里存在 覆盖后 before_script "
  after_script:
    - echo "我是模板不存在 新增 after_script"
  script: 
    - echo "我的源模板 存在 覆盖后script"

合并之后的如下

testjob:
  stage: test # 源文件没有,继承
  before_script: # 源文件有,覆盖
    - echo "我是在模板里存在 覆盖后 before_script"
  after_script: # 模板里没有,使用源文件的
     - echo "我是模板不存在 新增 after_script"
  script: # 源文件有,覆盖
    - echo "我的源模板 存在 覆盖后script"

 

extends & include
上面我们是将模板和引入模板写在了一个文件里面,我们也可以使用 include 导入,然后在使用 extends 继承

这里以 local 导入为例,在 项目下创建一个 ci/localci.yml 文件,内容如下

testjob:
  stage: test
  before_script:
    - echo "我是在 script 前面运行的"
  after_script:
     - echo "我是after_script"
  script: 
    - echo "my is test"

查看流水线

 

 

posted @ 2024-02-05 15:09  IT老登  阅读(64)  评论(0编辑  收藏  举报
访次: AmazingCounters.com 次