.gitlab-ci.yml文件参数配置和使用

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

文章目录


K8S自动化部署JAVA项目(Gitlab CI/CD)请参考文章:K8S部署Java项目(Gitlab CI/CD自动化部署)

一、介绍

既然你用到了.gitlab-ci.yml文件,应该对Gitlab CI/CD有一定的了解,简单说一下

  • Gitlab CI/CD是代码仓库的一个功能,用于项目的持续集成(Continuous Integration)、持续交付(Continuous Delivery)、持续部署(Continuous Deployment),是现在主流的devops工具
  • 项目注册gitlab-runner工具后,只要更新代码,gitlab-runner工具就会执行.gitlab-ci.yml文件中的任务,实现CI/CD
  • .gitlab-ci.yml文件必须位于项目根目录下

二、配置

关于.gitlab-ci.yml文件中的参数详解,请参考另一篇:.gitlab-ci.yml文件参数

也可参考官网文档(英文):https://docs.gitlab.com/ee/ci/yaml/

如何配置?

以下为java项目(springboot)为例,配置该文件

.gitlab-ci.yml

yml 复制代码
#全局变量,自定义变量名和值,全局引用,方便修改
#系统变量与自定义变量的使用,以$开始的表示系统变量的引用,加${}的表示自定义变量的引用
variables:
  #harbor镜像仓库IP
  HARBOR_IP: 172.30.0.224
  #harbor镜像仓库端口
  HARBOR_PORT: 8443
  #harbor仓库URL
  HARBOR_URL: ${HARBOR_IP}:${HARBOR_PORT}
  #harbor镜像仓库账号
  HARBOR_USERNAME: admin
  #harbor镜像仓库密码
  HARBOR_PASSWORD: Harbor12345

  #用于存放项目镜像的harbor镜像仓库项目地址
  IMAGE_HARBOR_REPOSITORY: ${HARBOR_IP}:${HARBOR_PORT}/k8s-demo

  #构建的镜像名称定义
  #PROJECT_IMAGE_NAME: $CI_PROJECT_NAME-$CI_PROJECT_ID
  PROJECT_IMAGE_NAME: k8s-springboot
  #构建的镜像标签定义
  #PROJECT_IMAGE_TAG: $DEPLOY_TIME_TAG-$CI_PIPELINE_ID-$CI_COMMIT_REF_NAME
  PROJECT_IMAGE_TAG: v20240204

  #本地jar包存放位置
  #PROJECT_JAR_DIR: $HOME/.m2/$CI_PROJECT_NAME-$CI_PROJECT_ID-$CI_COMMIT_REF_NAME
  PROJECT_JAR_DIR: /root/jar/k8s-project
  #maven的依赖存放文件夹路径
  MAVEN_REPOSITORY_DIR: /root/maven/.m2
  #本地镜像存储路径(容器内)
  CI_IMAGE_DIR: /root/images
  #CI_IMAGE_DIR: /root/k8s-project/app.jar

#定义任务阶段,任务执行顺序会根据列举顺序执行,前一个stage不执行完或者报错,后面的stage不会开始,不同job相同stage的任务会并行执行
#package打包,build构建,deploy部署
stages:
  - package
  - build
  - test
  - deploy

#前置脚本,适用于全局,所有任务开始之前执行该脚本命令
before_script:
  - echo: "project ci/cd task start"
  #创建目录用于存储maven依赖,仅用于测试before脚本,暂时还没用到该文件夹
  - mkdir -p ${MAVEN_REPOSITORY_DIR}


#任务部分,根据定义的stage顺序来执行任务
#如想跳过该任务,可在任务名称前加上英文句号".",如.job1-package,执行时会跳过该任务
#打包项目
job1-package:
  #任务阶段
  stage: package
  #任务引用的镜像
  image: docker:latest
  #任务执行选用的runner的标签,定义后会根据标签选用对应的runner执行任务
  tags:
    - runner-01
  #指定此job只对master分支生效
  only:
    - master
  #执行脚本,maven打包,创建文件夹,将jar包复制到文件夹中
  script:
    #提示信息打印
    - echo: '打包任务开始---->清理之前的jar包,打包,将包复制到容器中'
    #1项目打包,以下5个打包方式任选其一即可,可在package前加上clean来先清理
    #- mvn package
    #- mvn clean package
    #2使用prod配置文件打包,-PprofileName表示激活指定的构建配置文件,-P后加配置文件名称
    #- mvn package -Pprod
    #3跳过测试打包,-Dmaven.test.skip=true表示跳过单元测试
    - mvn clean package -Dmaven.test.skip=true
    #4清空并打包,跳过单元测试
    #- mvn clean package -Dmaven.test.skip=true
    #5更新依赖并打包,强制更新snapshots和releases
    #- mvn package -U
    #删除jar包,此步已在部署环节执行,个人也觉得在构建镜像后删除比较合适,当然也可以在这里打包前检查并删除
    #- rm -rf ${PROJECT_JAR_DIR}/app.jar
    #创建文件夹存储打包文件
    - mkdir -p ${PROJECT_JAR_DIR}
    #将打包文件复制到指定文件夹中,这里需要注意,打包后的jar包文件名称需要在项目的pom.xml中配置指定,不然默认生成的jar会是项目名-版本号.jar的格式
    - cp target/app.jar ${PROJECT_JAR_DIR}/app.jar
  #因为后续要用到这个任务打的包,后续配合dependencies在其他任务引用
  #artifacts:
    #paths:
      #- ${PROJECT_JAR_DIR}/*.jar


#任务部分,根据定义的stage顺序来执行任务
#构建镜像
job2-build:
  #任务阶段
  stage: build
  #任务引用的镜像
  image: docker:latest
  #任务执行选用的runner的标签,定义后会根据标签选用对应的runner执行任务
  tags:
    - runner-01
  #使用的docker服务,这里不是很清楚,但可以省略该部分,暂时不用它
  #services:
    #- 191.128.0.2:8443/test01/docker-hs:202401-dind
  #局部前置脚本命令,仅作用于此任务部分,创建用于存储项目镜像的本地路径,前面我们定义了全局变量,这里创建目录
  before_script:
    - mkdir -p ${CI_IMAGE_DIR}
  #执行脚本,列举jar包文件夹,构建镜像,打标签,推送镜像,删除镜像
  script:
    #提示信息打印
    - echo '打包任务开始---->清理之前的jar包,打包,将包复制到容器中'
    #列举当前jar包,查看是否已复制过来
    - ls -l ${PROJECT_JAR_DIR}
    #以下构建镜像部分会使用Dockerfile文件进行构建
    #.表示将镜像打标签后存放在当前位置,也可以存到别的位置,写成别的文件夹路径即可
    - docker build -t ${PROJECT_IMAGE_NAME}:${PROJECT_IMAGE_TAG} .
    #如果Dockerfile文件在别的目录下,如./src/Dockerfile,可以用-f指定文件位置
    #- docker build -t ${CI_IMAGE_DIR}:${PROJECT_IMAGE_TAG} -f ./src/Dockerfile .
    #将镜像推送到仓库
    - docker push ${PROJECT_IMAGE_NAME}:${PROJECT_IMAGE_TAG}
    #列举镜像是否已生成
    - docker images | ${PROJECT_IMAGE_NAME}
    #也是打标签,同上,但是可以将之前的名称改为新名称,此命令用于将镜像打标签后上传到harbor镜像仓库
    - docker -t  ${PROJECT_IMAGE_NAME}:${PROJECT_IMAGE_TAG} ${IMAGE_HARBOR_REPOSITORY}/${PROJECT_IMAGE_NAME}:${PROJECT_IMAGE_TAG}
    #将镜像推送到到harbor仓库
    - docker push ${IMAGE_HARBOR_REPOSITORY}/${PROJECT_IMAGE_NAME}:${PROJECT_IMAGE_TAG}
    #删除jar包
    - rm -rf ${PROJECT_JAR_DIR}/app.jar
    #删除打标签后用于推送到harbor仓库的的镜像
    - docker rmi -f ${IMAGE_HARBOR_REPOSITORY}/${PROJECT_IMAGE_NAME}:${PROJECT_IMAGE_TAG}
    #再删除原始构建的镜像
    - docker rmi -f ${CI_IMAGE_DIR}:${PROJECT_IMAGE_TAG}


#任务部分,根据定义的stage顺序来执行任务
#测试
#在任务前加英文点.来忽略任务,流程会跳过该任务的执行
.job3-test:
  #任务阶段
  stage: test
  #任务引用的镜像
  image: 191.128.0.2:8443/k8s-demo:$CI_COMMIT_REF_NAME
  #任务执行选用的runner的标签,定义后会根据标签选用对应的runner执行任务
  tags:
    - runner-01
  #指定此job只对master分支生效
  only:
    - master
  #执行脚本,部署服务
  script:
    - echo ${IMAGE_HARBOR_REPOSITORY}:$CI_COMMIT_REF_NAME
    - kubectl apply -f /etc/k8s-demo.yaml

#任务部分,根据定义的stage顺序来执行任务
#
job4-deploy:
  #任务阶段
  stage: deploy
  #任务引用的镜像,此处为项目部署所需要的项目镜像(前面build阶段构建的镜像),从harbor上拉取,速度很快
  image: ${IMAGE_HARBOR_REPOSITORY}/${PROJECT_IMAGE_NAME}:${PROJECT_IMAGE_TAG}
  #任务执行选用的runner的标签,定义后会根据标签选用对应的runner执行任务
  tags:
    - runner-01
  #指定此job只对master分支生效
  only:
    - master
  #执行脚本,部署服务
  script:
    - echo '项目部署--->开始部署,缓存部署,pod部署,服务部署'
    #部署java项目的yaml文件都放在/sb-p/sb-test文件夹下,需提前准备好
    - kubectl apply -f /sb-p/sb-test/sb-pvc.yaml
    - kubectl apply -f /sb-p/sb-test/sb-dplm.yaml
    - kubectl apply -f /sb-p/sb-test/sb-svc.yaml
  #配合artifacts参数使用,使用package阶段任务的打包环境
  #dependencies:
    #- package

三、使用

.gitlab-ci.yml文件的使用如下

先在gitlab配置runner,然后准备项目,当代码提交更新,runner会执行.gitlab-ci.yml文件脚本,会自动构建、部署项目

然后访问即可

具体项目如何基于Gitlab CI/CD实现自动化部署可参考文章:K8S部署Java项目(Gitlab CI/CD自动化部署)


感谢阅读,祝君暴富!

相关推荐
武子康5 分钟前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
豪宇刘1 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
2301_819287121 小时前
ce第六次作业
linux·运维·服务器·网络
秋恬意1 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
CIb0la1 小时前
GitLab 停止为中国区用户提供 GitLab.com 账号服务
运维·网络·程序人生
武汉联从信息1 小时前
如何使用linux日志管理工具来管理oracle osb服务器日志文件?
linux·运维·服务器
天天进步20151 小时前
STUN服务器实现NAT穿透
运维·服务器
月如琉璃1 小时前
1.gitlab 服务器搭建流程
服务器·gitlab
刘大辉在路上1 小时前
突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除
git·后端·gitlab·版本管理·源代码管理
PieroPc2 小时前
Python 自动化 打开网站 填表登陆 例子
运维·python·自动化