gitlab--include 引入其他 ci 文件、extends 继成模板作业
include
include 可以允许引入外部 yaml 文件,文件具有扩展名 .yml 或 .yaml 。使用合并功能可以自定义和覆盖包含本地定义的 CI/CD 配置,相同的 job 会合并,参数值以源文件为准
local
引入同一存储库中的文件,使用相对于根目录的完整路径进行引用,与配置文件在同一分支上使用
在项目下创建一个 ci 目录,在里面创建一个 localci.yml 文件,写入下面内容
stages:
- deploy
deployjob:
stage: deploy
script:
- echo 'my is deploy'
在根目录下的 .gitlab-ci.yml 里写入下面内容
stages:
- build
- deploy
- test
include:
local: 'ci/localci.yml' # 引用本地的文件,使用 local
buildjob:
stage: build
script: ls
testjob:
stage: test
script: ls
运行流水线,查看流水线,可以看到引入的本地的 ci 文件也执行了
file
file 可以引用另一个项目下的文件
在 test01 项目下创建一个 .gitlab-ci.yml 文件,写入下面内容
stages:
- unit
- deploy
deploy:
stage: deploy
script:
- echo 'my is deploy'
unit:
stage: unit
script:
- echo 'my is unit'
在项目中引入 test01 项目下 /ci/.gitlab-ci.yml 文件
stages:
- build
- deploy # 要写 deploy,虽然是引用的,但也要写
- unit # 要写 unit,虽然是引用的,但也要写
- test
include:
- project: gitlab-instance-460cd741/test01 # 项目路径,到项目就可以,不需要到项目下的目录
ref: main # 分支
file: 'ci/.gitlab-ci.yml' # 具体的文件
buildjob:
stage: build
script: ls
testjob:
stage: test
script: ls
project 对应的是下面的这里的
查看流水线
template
include:
- template: Auto-DevOps.gitlab-ci.yml
remote
用于通过 HTTP / HTTPS 包含来自其他位置的文件,并使用完整 URL 进行引用. 远程文件必须可以通过简单的 GET 请求公开访问,因为不支持远程 URL 中的身份验证架构
在 gitee 创建个项目,在里面创建一个 .gitlab-ci.yml 文件
内容如下
在引用远程的 ci 地址
stages:
- build
- deploy
- unit
- test
include:
- remote: 'https://gitee.com/zouzou_busy/devops_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 "我是before_script"
script:
- echo "哈哈哈"
buildjob:
stage: build
script: ls
testjob:
extends: .test # 继承 .test 模板,有的会覆盖模板里的,没有的会继承
before_script:
- echo "我是在 script 前面运行的"
after_script:
- echo "我是after_script"
script:
- echo "嘎嘎嘎"
合并之后的如下
testjob:
stage: test # 源文件没有,继承
before_script: # 源文件有,覆盖
- echo "我是在 script 前面运行的"
after_script: # 模板里没有,使用源文件的
- echo "我是after_script"
script: # 源文件有,覆盖
- echo "嘎嘎嘎"
extends & include
上面我们是将模板和引入模板写在了一个文件里面,我们也可以使用 include 导入,然后在使用 extends 继承
这里以 local 导入为例,在 项目下创建一个 ci/localci.yml 文件,内容如下
stages:
- deploy
deployjob:
stage: deploy
script:
- echo 'my is deploy'
.template: # 模板
stage: test
script:
- echo "my is test"
在引入模板,继承模板
include:
local: 'ci/localci.yml' # 可以导入其他项目的或者远程的,这里导入的是本地的 localci.yml 文件,可以使用里面所有定义的 job
stages:
- build
- test
- deploy
buildjob:
stage: build
script: ls
testjob:
extends: .template # 继承导入里的 .template 模板
before_script:
- echo "我是在 script 前面运行的"
after_script:
- echo "我是after_script"
合并后的 yaml 如下
testjob:
stage: test
before_script:
- echo "我是在 script 前面运行的"
after_script:
- echo "我是after_script"
script:
- echo "my is test"
查看流水线