编写gitlab-ci.yml文件以及应用

1. 在项目中创建gitlab-ci文件

在这里插入图片描述
把下面的内容复制进gitlab-ci文件

#流水线的stages的顺序可以自己定义
#相同阶段的任务将会并发的执行,上一个阶段的任务完整的结束之后,下一个阶段的任务才会开始执行 
stages:
  - check_code 
  - build
  - deploy 
job1:
  stage: check_code
  script:
     - echo 'stage1 job ,读取变量为:' $param1
 
 
job2:
  stage: build
  script:
     - echo 'stage2 job  ,读取变量为:' $param2
 
job3:
  stage: deploy
  script:
     - echo 'stage3 job  ,读取变量为:' $param3

2. 配置gitlab-ci文件中的变量

$param1,$param2,$param3这3个就是变量
进入Settings->CI/CD->Variables
在这里插入图片描述
设置参数值
param1=变量1
param2=变量2
param3=变量3
这些值我们在等下运行pipeline时看看是否在gitlab-ci被引用到

3. 配置gitlab runner

如果没有安装gitlab runner先去安装,怎么安装gitlab runner可以参考官网https://docs.gitlab.com/runner/install/
安装完后将runner注册进gitlab,gitlab上都写着指令教程,放心实践
我这个项目已经有了个组共享的runner,我就直接用就好了,可以在gitlab-ci文件上指定runner ,用tags属性
在这里插入图片描述

4. 运行pipeline

进入CI/CD->Pipelines->Run pipeline
在这里插入图片描述

在这里插入图片描述
运行后看到3个job,这就是stage定义的对应的job

在这里插入图片描述
点击job1,可以看到输出的日志,我打印出的信息,看到输出了param1定义的值“变量1”
在这里插入图片描述

依次点job2,job3也可以看到输出日志

在job1看到他分几个步骤

1. Preparing the "docker" executor(准备docker执行器,即容器运行环境这里默认加载的镜像是maven:3.5.2-jdk-7)
2. Preparing environment(准备环境)
3. Getting source from Git repository(拉取代码)
4. Executing "step_script" stage of the job script(执行脚本)

返回pipeline列表看看运行的pipeline
在这里插入图片描述
可以看到job1,job2,job3都是打钩的状态都是正常,点击可以查看该阶段的日志

5. gitlab-ci文件属性

属性含义
stages定义任务内的阶段,每个阶段必须从全局定义的阶段中选择
variables定义全局变量
stage选择全局定义的阶段,只能选其中一个
before_script在脚本执行前执行的指令
after_script在脚本执行后执行的指令
script由runner执行的shell脚本(必填项)
retry发生故障时自动重试作业的时间和次数(0,1,2)
image指定基础运行环境的docker镜像,如java,python,maven等
tags指定流水线使用哪个runner去运行,只能定义到一个具体的项目,tags的取值范围是该项目可见的runner
only限定某些分支或者某些tag
except排除某些分支和某些tag
services使用Docker services(服务)镜像
when什么时候运行作业
environment部署的环境名称
cache指定需要在job之间缓存的文件或目录
artifacts归档文件列表,指定成功后应附加到job的文件和目录的列表
dependencies当前作业依赖的其他作业,你可以使用依赖作业的归档文件
coverage作业的代码覆盖率
parallel指定并行运行的作业实例
trigger定义下游流水线的触发器
include作业加载其他YAML文件
pages上传GitLab Pages的结果
allow_failure允许作业失败,失败的作业不影响提交的状态

6. 属性额外说明

stages
定义流水线全局阶段,默认有3个阶段,build、test、deploy。如果作业未定义stage阶段,默认使用test阶段

when
用于实现在作业失败时或发生故障时运行的作业,可以设置下面几个值

on_success :只有前面的阶段的所有作业都成功时才执行,这是默认值。
on_failure :当前面阶段的作业至少有一个失败时才执行。
always : 无论前面的作业是否成功,一直执行本作业。
manual :手动执行作业,作业不会自动执行,需要人工手动点击启动作业。
delayed : 延迟执行作业,配合 start_in 关键字一起作用, start_in 设置的值必须小于或等于1小时,start_in 设置的值示例: 10 seconds 、 30 minutes 、 1 hour ,前面的作业结束时计时器马上开始计时。

.符号
对于不想执行的job,可以在前面加“.”符号表示跳过

variables $引用变量
可以使用如${DATABASE_URL}来引用定义的变量

only 和 except

  1. only 和 except 中可以使用特殊的关键字,如 branches 、 tags 、 api 、 external 、 pipelines 、 pushes 、 schedules 、 triggers 、 web 、 merge_requests 、 chats 等
    在这里插入图片描述

  2. only 和 except 支持高级策略,refs 、 variables 、 changes 、 kubernetes 四个关键字可以使用。

7. 稍微复杂点的gitlab-ci文件

这个是在项目中的其中一个文件,仅供参考,没啥涉密的东西

variables:
  COVERAGE_WEBHOOK_URL: $COVERAGE_WEBHOOK_URI?branch=$CI_COMMIT_REF_NAME&gitlabPipelineId=$CI_PIPELINE_ID&gitlabProjectId=$CI_PROJECT_ID
  IMAGE_WEBHOOK_URL: $CI_SERVICE_URL/webhook/gitlabProjects/$CI_PROJECT_ID/pipelines/$CI_PIPELINE_ID/images
  imageTag: $CI_PROJECT_NAME-$DEPLOY_TIME_TAG-$CI_PIPELINE_ID
  DOCKER_TLS_CERTDIR: ''

stages:
  - code_check
  - push_images
  - deploy

code_check:
  stage: code_check
  image: 10.19.64.xxx:8080/ums/maven:3.6.0-jdk-8
  tags:
    - devops
  script:
    - mvn clean package -DskipTests
  artifacts:
    expire_in: 3 hrs
    paths:
      - ./ib-provider/target/*.jar


push_images:
  stage: push_images
  image: 10.19.64.xxx:8080/library/docker:19.03.14
  tags:
  - devops
  services:
  - 10.19.64.xxx:8080/library/docker:19.03.14-dind
  before_script:
  - mkdir -p $HOME/.docker
  - echo $DOCKER_AUTH_CONFIG > $HOME/.docker/config.json
  - docker info
  script:
  - docker build -t ${CI_REGISTRY_IMAGE_DIR}:${imageTag} . 
  - docker push ${CI_REGISTRY_IMAGE_DIR}:${imageTag}
  - wget --post-data "imageTag=$imageTag" $IMAGE_WEBHOOK_URL


deploy:
  stage: deploy
  image: harbor.xxx.cn/devops-ci/mvn:1.0.1
  tags:
    - devops
  script:
    - echo $imageTag
    - wget --no-check-certificate --header="Authorization:$AUTH_TOKEN" --post-data="pipelineId=$CI_PIPELINE_ID&ref=$CI_COMMIT_REF_NAME&imageName=$imageName&tag=$imageTag&deployVersion=$deployVersion&description=$description&deployParams=$deployParams&envName=$envName&deployType=$deployType" $DEPLOY_WEBHOOK_URL
  only:
    variables:
      - $IS_DEPLOY == "1"
  dependencies:
    - push_images


Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐