手把手教学编写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

  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.203: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.203:8080/library/docker:19.03.14
  tags:
  - devops
  services:
  - 10.19.64.203: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.uniin.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


  • 10
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
编写 GitLab CI/CD 配置文件 `.gitlab-ci.yml` 的基本步骤如下: 1. 打开你的项目仓库,进入 `Settings` -> `CI/CD` -> `General pipelines settings`,启用 CI/CD 功能。 2. 在项目仓库中创建 `.gitlab-ci.yml` 文件,并在其中定义各个阶段的作业和所需的步骤。 3. 在 `.gitlab-ci.yml` 文件中,你需要定义以下内容: - `stages`:定义各个阶段的名称和执行顺序。 - `variables`:定义环境变量。 - `before_script`:定义所有作业都需要执行的命令。 - `after_script`:定义作业执行完毕后需要执行的命令。 - `jobs`:定义各个作业的名称、阶段、执行脚本等信息。 4. 编写完 `.gitlab-ci.yml` 文件之后,提交到项目仓库中,GitLab 会自动检测并执行配置文件中定义的作业。 下面是一个简单的 `.gitlab-ci.yml` 文件示例: ```yml stages: - build - test - deploy variables: JAVA_HOME: /usr/lib/jvm/java-11-openjdk-amd64 before_script: - echo "Setting up environment" - apt-get update -qy && apt-get install -y maven after_script: - echo "Tearing down environment" - rm -rf target/ build: stage: build script: - mvn package test: stage: test script: - mvn test deploy: stage: deploy script: - echo "Deploying to production server" ``` 在这个示例中,我们定义了三个阶段:`build`、`test` 和 `deploy`,每个阶段都有对应的作业。`before_script` 和 `after_script` 分别定义了作业执行前和执行后需要执行的命令。`variables` 中定义了一个环境变量 `JAVA_HOME`。 `build` 作业会执行 `mvn package` 命令,打包应用程序;`test` 作业会执行 `mvn test` 命令,运行测试用例;`deploy` 作业会执行 `echo "Deploying to production server"` 命令,将应用程序部署到生产环境中。 在实际使用中,你需要根据项目的具体情况修改 `.gitlab-ci.yml` 文件,以满足不同的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值