手把手教学编写gitlab-ci.yml文件以及应用(最简单易懂实践)
编写gitlab-ci.yml文件以及应用
编写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
-
only 和 except 中可以使用特殊的关键字,如 branches 、 tags 、 api 、 external 、 pipelines 、 pushes 、 schedules 、 triggers 、 web 、 merge_requests 、 chats 等
-
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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)