.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

#全局变量,自定义变量名和值,全局引用,方便修改
#系统变量与自定义变量的使用,以$开始的表示系统变量的引用,加${}的表示自定义变量的引用
variables:#harbor镜像仓库IPHARBOR_IP: 172.30.0.224#harbor镜像仓库端口HARBOR_PORT: 8443#harbor仓库URLHARBOR_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_IDPROJECT_IMAGE_NAME: k8s-springboot#构建的镜像标签定义#PROJECT_IMAGE_TAG: $DEPLOY_TIME_TAG-$CI_PIPELINE_ID-$CI_COMMIT_REF_NAMEPROJECT_IMAGE_TAG: v20240204#本地jar包存放位置#PROJECT_JAR_DIR: $HOME/.m2/$CI_PROJECT_NAME-$CI_PROJECT_ID-$CI_COMMIT_REF_NAMEPROJECT_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自动化部署)


感谢阅读,祝君暴富!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/669564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AUTOSAR内存篇 -EEPROM Driver(Eep)

文章目录 简介缩写术语功能介绍一般行为错误分类错误检测API参数错误EEPROM状态检查EEPROM作业遇到的硬件故障超时监督作业处理的一般要求读作业的处理写作业处理擦作业的处理对比作业的处理API介绍类型定义

Webpack源码浅析

webpack启动方式 webpack有两种启动方式: 通过webpack-cli脚手架来启动,即可以在Terminal终端直接运行; webpack ./debug/index.js --config ./debug/webpack.config.js通过require(webpack)引入包的方式执行;其实第一种方式最终…

安装opencart

设置网站用户权限 chown -R www:www /home/wwwroot/www.vapewholesalechina.com/ 设置open_basedir防跨目录 vim /usr/local/nginx/conf/fastcgi.conf chattr -i /home/wwwroot/www.vapewholesalechina.com/.user.ini https://lnmp.org/faq/lnmp-vhost-add-howto.html …

zabbix server/agent源码编译成rpm包(通用版-小白教程)

前言 工作环境需要用到很多信创的操作系统,zabbix agent2的官方没有现成的包可用,网上巴拉了一下找到zabbix agent2通用版编译成rpm包的方法 思路:假如当你有一批ky10_x86的机器需要配套的zabbix agent的rpm包,那就找一台ky10_x…

计组学习笔记2024/2/5

记录每天学到了什么,同时在挪移图片过程中再次理解加深印象 学计算机最重要的是理解,而不是整齐的笔记,不要主次搞混,所以以后记笔记的模式也要改一下(主要还是自己太菜,还达不到一边做到整齐笔记的同时还能够有时间做到理解,所以只能舍弃整齐时间保留理解时间)(不过如果有现成…

针对物联网应用优化 Cortex-M0+ 微控制器的功耗消耗”

为了针对物联网应用优化 Cortex-M0 微控制器的功耗消耗,我们可以采取一系列措施,包括优化代码、使用低功耗模式、优化外设配置等。以下是对 Cortex-M0 微控制器功耗消耗优化的详细解释,并提供示例代码以演示如何在物联网应用中优化功耗。 ✅作…

淘客返利系统:揭秘技术背后的实现方案

淘客返利系统:揭秘技术背后的实现方案 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨淘宝客返利系统的技术实现方案,为您…

敏捷开发的INVEST原则

很久没来这个社区发点文章了,是因为工作的变动很大。 上一篇文章,我还在讨论专项测试领域,如何在金融投资领域进行测试,如何把控测试管理。 现在我要做的是质量体系建设的咨询,上升的高度和领域发生了变化。 我现在…

centos系统初始配置

centos 7网络配置、主机名配置、修改hosts文件、ssh服务和远程登录。 静态网络配置 主机名配置 ssh服务和远程登陆

Nginx: a little source code

Nginx被称为C程序员必学的源码之一,我觉得名副其实,它的事件机制、内存管理、进程通信都可以说是顶级实践,非常值得学习。 Nginx源码比较多,本文只看几个重要的模块,更详细的内容请参考《深入理解nginx模块开发与架构》…

Striped64源码阅读

文章目录 简介模型代码分析成员变量方法 补充ThreadLocalRandomContended注解 - 解决伪共享问题LongAdder & LongAccumulator 参考链接 本人的源码阅读主要聚焦于类的使用场景,一般只在java层面进行分析,没有深入到一些native方法的实现。并且由于知…

6.s081 学习实验记录(五)traps

文章目录 一、RISC-V assembly简介问题 二、Backtrace简介注意实验代码实验结果 三、Alarm简介注意实验代码实验结果 一、RISC-V assembly 简介 git checkout traps,切换到traps分支user/call.c 文件在我们输入 make fs.img 之后会被汇编为 call.asm 文件&#xf…

网络原理TCP/IP(5)

文章目录 IP协议IP协议报头地址管理网段划分特殊的IP地址路由选择以太网认识MAC地址对比理解MAC地址和IP地址DNS(域名服务器) IP协议 IP协议主要完成的工作是两方面: 地址管理,使用一套地址体系,来描述互联网上每个设…

day20网页基本标签

网页基本标签 标题标签段落标签换行标签水平线标签字体样式标签注释和特殊符号 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>网页基本标签</title> </head> <body> <!--标题…

CTFshow web(php特性 105-108)

web105 <?php /* # -*- coding: utf-8 -*- # Author: Firebasky # Date: 2020-09-16 11:25:09 # Last Modified by: h1xa # Last Modified time: 2020-09-28 22:34:07 */ highlight_file(__FILE__); include(flag.php); error_reporting(0); $error你还想要flag嘛&…

BVH动画绑骨蒙皮并在Unity上展示

文章目录 Blender绑定骨骼Blender蒙皮Blender中导入bvh文件将FBX导入Unity Blender绑定骨骼 先左上角红框进入model模式&#xff0c;选中要绑定的模型&#xff0c;然后进入Edit模式把骨骼和关节对齐。 &#xff08;选中骨骼&#xff0c;G移动&#xff0c;R旋转&#xff09; 为…

如何使用NimExec通过无文件命令执行实现横向移动

关于NimExec NimExec是一款功能强大的无文件远程命令执行工具&#xff0c;该工具专为红队研究人员设计&#xff0c;使用Nim语言开发&#xff0c;基于服务控制管理器远程协议&#xff08;MS-SCMR&#xff09;实现其功能&#xff0c;可以帮助广大研究人员在目标网络系统中实现横…

婚姻是什么哩?

我们应该明白&#xff0c;或许以后也会明白。婚姻应该是爱情的结晶&#xff0c;而不是父母亲戚的催促。当你遇到一个人&#xff0c;一个合适的、合拍的人&#xff0c;你自然而然就会有想结婚的想法。遇到一个能随时发起聊天&#xff0c;聊起来能忽视时间的人&#xff0c;真的会…

谈谈mybatis的理解(一)

mybatis不允许方法的重载&#xff0c;因为ID不能重复 mybatis 为什么要使用mybatis? JDBC的弊端&#xff1a; 硬编码&#xff1a;SQL语句存在Java代码中&#xff0c;不能很好的分离数据库语句和Java语句&#xff0c;造成代码不易维护 代码重复度高&#xff1a;大量重复的…

C++:哈希表的线性探测(模拟实现)

哈希表的增删查改的效率很高&#xff0c;是O&#xff08;1&#xff09;&#xff0c;比搜索二叉树要快很多。那么他是怎么实现的呢&#xff1f;他与计数排序有点相似就是通过映射的方式实现。不过在哈希表中不需要开这么的数据&#xff0c;它只需要开一部分空间然后使用除留余数…