1.tags
用于从允许运行该项目的所有Runner列表中选择特定的Runner,在Runner注册期间,您可以指定Runner的标签。
tags
可让您使用指定了标签的runner来运行作业,此runner具有ruby和postgres标签。
示例
给定带有osx标签的OS X Runner和带有windows标签的Windows Runner,以下作业将在各自的平台上运行。 windows job: stage: - build tags: - windows script: - echo Hello, %USERNAME%! osx job: stage: - build tags: - osx script: - echo "Hello, $USER!"
2.allow_failure
allow_failure允许作业失败,默认值为false 。启用后,如果作业失败,该作业将在用户界面中显示橙色警告. 但是,管道的逻辑流程将认为作业成功/通过,并且不会被阻塞。 假设所有其他作业均成功,则该作业的阶段及其管道将显示相同的橙色警告。但是,关联的提交将被标记为"通过”,而不会发出警告。
示例
job1: stage: test script: - execute_script_that_will_fail allow_failure: true
3.when
on_success前面阶段中的所有作业都成功(或由于标记为allow_failure而被视为成功)时才执行作业。 这是默认值。 on_failure当前面阶段出现失败则执行。 always -执行作业,而不管先前阶段的作业状态如何,放到最后执行。总是执行。 manual -手动执行作业,不会自动执行,需要由用户显式启动. 手动操作的示例用法是部署到生产环境. 可以从管道,作业,环境和部署视图开始手动操作。 delayed -延迟,需要配合start_in
4.start_in
start_in 延迟一定时间后执行作业(在GitLab 11.14中已添加)。 有效值'5',10 seconds,30 minutes, 1 day, 1 week 。
以上综合示例
before_script: - echo "before-script!!" variables: DOMAIN: example.com stages: - build - test - codescan - deploy build: before_script: - echo "before-script in job" stage: build script: - echo "mvn clean " - echo "mvn install" - echo "$DOMAIN" after_script: - echo "after script in buildjob" unittest: stage: test script: - ech "run test" when: delayed #当状态为延迟时执行 start_in: '30' #start_in表示延迟 30秒 allow_failure: true #允许失败,失败不阻塞后续job deploy: stage: deploy script: - echo "hello deploy" - sleep 2; when: manual codescan: stage: codescan script: - echo "codescan" - sleep 5; when: on_success #默认 after_script: - echo "after-script"
5.retry
配置在失败的情况下重试作业的次数。 当作业失败并配置了retry ,将再次处理该作业,直到达到retry关键字指定的次数。如果retry设置为2,并且作业在第二次运行成功(第一次重试),则不会再次重试. retry值必须是一个正整数,等于或大于0,但小于或等于2(最多两次重试,总共运行3次).
示例
unittest: stage: test retry: 2 #最多执行3次 script: - ech "run test"
扩展:根据失败的原因设置重试次数
always :在发生任何故障时重试(默认). unknown_failure :当失败原因未知时。 script_failure :脚本失败时重试。 api_failure :API失败重试。 stuck_or_timeout_failure :作业卡住或超时时。 runner_system_failure :运行系统发生故障。 missing_dependency_failure: 如果依赖丢失。 runner_unsupported :Runner不受支持。 stale_schedule :无法执行延迟的作业。 job_execution_timeout :脚本超出了为作业设置的最大执行时间。 archived_failure :作业已存档且无法运行。 unmet_prerequisites :作业未能完成先决条件任务。 scheduler_failure :调度程序未能将作业分配给运行scheduler_failure。 data_integrity_failure :检测到结构完整性问题。
示例
定义当出现脚本错误重试两次,也就是会运行三次。 unittest: stage: test tags: - build only: - master script: - ech "run test" retry: max: 2 when: - script_failure
6.timeout 超时
特定作业配置超时,作业级别的超时可以超过项目级别的超时,但不能超过Runner特定的超时
作业超时示例
build: script: build.sh timeout: 3 hours 30 minutes test: script: rspec timeout: 3h 30m
项目设置流水线超时时间
超时定义了作业可以运行的最长时间(以分钟为单位)。 这可以在项目的**“设置">” CI / CD">"常规管道"设置下进行配置** 。 默认值为60分钟。
runner超时时间
此类超时(如果小于项目定义的超时 )将具有优先权。此功能可用于通过设置大超时(例如一个星期)来防止Shared Runner被项目占用。未配置时,Runner将不会覆盖项目超时。
7.parallel
配置要并行运行的作业实例数,此值必须大于或等于2并且小于或等于50。 这将创建N个并行运行的同一作业实例. 它们从job_name 1/N到job_name N/N依次命名。
codescan: stage: codescan tags: - build only: - master script: - echo "codescan" - sleep 5; parallel: 5
综合示例
before_script: - echo "before-script!!" variables: DOMAIN: example.com stages: - build - test - codescan - deploy build: before_script: - echo "before-script in job" stage: build script: - echo "mvn clean " - echo "mvn install" - echo "$DOMAIN" after_script: - echo "after script in buildjob" unittest: stage: test script: - ech "run test" when: delayed start_in: '5' allow_failure: true retry: max: 1 when: - script_failure timeout: 1 hours 10 minutes deploy: stage: deploy script: - echo "hello deploy" - sleep 2; when: manual codescan: stage: codescan script: - echo "codescan" - sleep 5; when: on_success parallel: 5 after_script: - echo "after-script"