ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

.gitlab-ci.yml说明

2022-05-07 16:05:14  阅读:259  来源: 互联网

标签:ci script gitlab job no docker stages yml stage


Gitlab官方文档:https://docs.gitlab.com/ee/ci/yaml/README.html

Gitlab CI通过YAML文件管理配置job,该文件存放于仓库的根目录, 默认名为.gitlab-ci.yml,定义了job应该如何工作。

pipeline:
一个pipeline就是一次完整的构建任务,里面可以包含多个阶段(stages)。

stage:
stages表示任务构建的阶段。一次pipeline中允许定义多个stages,这些stages 会有以下特点:

1. 所有 stages 会按照顺序运行,即当一个 stage 完成后,下一个 stage 才会开始

2. 只有当所有 stages 完成后,该构建任务 (pipeline) 才会成功

3. 如果任何一个 stage 失败,那么后面的 stages 不会执行,该构建任务 (pipeline) 失败

job:
jobs表示构建工作,表示某个stage里面执行的工作。 我们可以在stages里面定义多个jobs,这些jobs会有以下特点:

1. 相同stage中的jobs会并行执行

2. 相同stage中的jobs都执行成功时,该stage才会成功

3. 如果任何一个job失败,那么该stage失败,即该构建任务 (pipeline) 失败

jobs的定义:

1. 定义了在什么条件下执行它们的条件

2. 具有任意名称的顶级元素,并且必须至少包含script

3. 不受定义数量的限制

示例:

job1:
script: "execute-script-for-job1"

job2:
script: "execute-script-for-job2"

上面包含两个单独的job,其中每个job执行不同的命令。

每个job都是独立运行的,可以直接执行命令./configure; make; make install或运行脚本sh test.sh。jobs由runners获取并在runners各自的环境中执行。

每个job必须有一个唯一的名称,但有几个保留的关键字不能用作job名称:

image

services

stages

types

before_script

after_script

variables

cache

配置参数列表:
一个job被定义为一列参数,这些参数指定了job的行为。下表列出了可用的job参数:

值 是否必须 描述
script yes 由Runner执行的shell脚本或命令
image no 使用的docker镜像
services no 使用的docker服务镜像
before_script no 在作业之前执行的脚本或命令
after_script no 在作业之后执行的脚本或命令
stages no 一个pipeline的各个阶段
stage no 一个job阶段,默认是test
only no 限制job什么时候执行
except no 限制job什么时候不执行
rules no 指定条件列表去确定一个job的可选属性以及是否执行该job。不可与only/except一起使用
tags no 指定job适用的runner,tags为runner标签
allow_failure no 允许job失败,如果失败将不会改变提交状态
when no 指定job什么时候执行,可以是on_success、on_failure、always和manual
environment no 指定job部署的环境名称
cache no 在后续运行之间应该缓存的文件列表
artifacts no 要附加到一个job上的文件和目录列表
dependencies no 通过提供要从中获取artifacts的job列表来限制将哪些artifacts传递给特定的job
coverage no 设置一个给定job的代码覆盖率
retry no job失败后的自动重试次数
timeout no 设置优先于项目范围的job超时时间
parallel no 一个job并行运行的实例数量
trigger no 定义下游pipeline的触发器
include no 允许该job包含外部YAML文件
extends no 一个job将继承的配置项
pages no 上传job的结果与GitLab Pages一起使用
variables no 在job级别上定义变量
interruptible no 定义一个job在因为新的运行而变得多余时是否可以取消
设置默认参数:
可以使用default关键字将某些参数全局设置为所有job的默认值,特定于job的配置可以覆盖默认参数。

下面的job参数可以被设置为默认值:

image
services
before_script
after_script
cache

示例:

default: #指定默认参数
image: ruby:2.5

rspec: #指定特定参数
script: bundle exec rspec

rspec 2.6:
image: ruby:2.6
script: bundle exec rspec

.gitlab-ci.yml示例:
stages:
- pull_code_test
- pull_code_production
- install_deps
- test
- build
- deploy_test
- deploy_production

variables:
PHP_FPM_CONTAINER: lnmp-php-fpm
WORK_DIR: /usr/share/nginx/html/
PROJECT: laravel-demo
GIT_DIR: /mnt/lnmp-docker

# 拉取代码
pull_code_test:
stage: pull_code_test
only:
- develop
script:
- cd ${GIT_DIR}/${PROJECT}
- git pull origin develop

pull_code_production:
stage: pull_code_production
only:
- master
script:
- cd ${GIT_DIR}/${PROJECT}
- git pull origin master

# 安装依赖
install_deps:
stage: install_deps
script:
- docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} composer install

build:
stage: build
script:
# Run migrations
- docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} php artisan migrate
# Cache clearing
- docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} php artisan cache:clear
# Create a cache file for faster configuration loading
- docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} php artisan config:cache
# Create a route cache file for faster route registration
- docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} php artisan route:clear

deploy_test:
stage: deploy_test
script:
- cd ${GIT_DIR}
- docker-compose down && docker-compose build && docker-compose up -d

deploy_production:
stage: deploy_production
script:
- cd ${GIT_DIR}
- docker-compose restart

更多.gitlab-ci.yml的说明请参考官方文档。

原文链接:https://blog.csdn.net/miss1181248983/article/details/102885253

标签:ci,script,gitlab,job,no,docker,stages,yml,stage
来源: https://www.cnblogs.com/mmgithub123/p/16242832.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有