当前位置: 首页 > news >正文

.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自动化部署)


感谢阅读,祝君暴富!

相关文章:

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

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

Go语言从基础到高级-目录

一、编程入门和Go语言简介 什么是编程和为什么要学习编程计算机编程的基本概念Go语言简介为什么选择Go语言 二、设置Go语言开发环境 如何安装Go语言设置环境变量Go语言的工作空间配置 三、Go语言基础 Hello, World!初体验变量和常量数据类型(整数、浮点数、字符…...

Linux CentOS stream 9 alias

alias命令在Linux中用于创建命令别名。它允许用户为常用的命令或命令组合创建短而易记的别名,从而提高工作效率。 alias命令与windows中的快捷方式相同,执行别名时,终端解释器就进行查询与转换,进而执行原来的完整命令。 熟练使用alias命令可以使我们将一长串命令或者一些…...

WebSocketServer+redis实时更新页面数据

redis 实现发布订阅功能具体实现_redis convertandsend-CSDN博客 主要看上面这个 使用redis做websocket分布式消息推送服务_websocket redis-CSDN博客 ClassCastException: java.lang.String cannot be cast to com.alibaba.fastjson.JSONObject 的解决办法_java.lang.class…...

快速掌握Vue.js框架:从入门到实战

一、引言 Vue.js,作为一款广受欢迎的渐进式JavaScript框架,以其轻量级、易用性和高效性在前端开发领域占据了一席之地。Vue.js遵循MVVM(Model-View-ViewModel)设计模式,它通过双向数据绑定机制简化了开发者对用户界面与底层数据模型之间关系的处理,使得构建现代Web应用变…...

###C语言程序设计-----C语言学习(11)#数据的存储和基本数据类型

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 一. 数据的存储 1.整型数据的存储 计算机处理的所有信息都以二进制形式表示…...

机器学习案例1:利用 Python 将语音转换为文本

目录 内容简介 基本环境配置 Python库安装 麦克风语音识别 音频文件的语音识别 长音频源语音识别 内容简介 语音识别是机器或程序识别口语中的单词和短语并将其转换为文本信息的能力。 大多数对于语音识别技术的应用场景就是Siri、Cortana和Google Assistant等个人助理,…...

杨辉三角的变形(数学)

题目 import java.util.Scanner;public class Main {public static void main(String[] args) { // 1 // 1 1 1 // 1 2 3 2 1 // 1 3 6 7 6 3 1 // 1 4 10 16 19 16 10 4 1Scanner sc new Scanner(System.in);int n sc.nextInt();int[][] res new int[n1][2*n];for(i…...

YOLOv5改进 | 融合改进篇 | 华为VanillaNet + BiFPN突破涨点极限

一、本文介绍 本文给大家带来的改进机制是华为VanillaNet主干配合BiFPN实现融合涨点,这个主干是一种注重极简主义和效率的神经网络我也将其进行了实验, 其中的BiFPN不用介绍了从其发布到现在一直是比较热门的改进机制,其主要思想是通过多层级的特征金字塔和双向信息传递来提…...

C++初阶篇----新手进村

目录 一、什么是C二、C关键字三、命名空间3.1命名空间的定义3.2命名空间的使用 四、C输入和输出五、缺省参数5.1缺省参数的概念5.2缺省参数的分类 六、函数重载6.1函数重载的概念6.2函数重载的原理----名字修饰 七、引用7.1引用概念7.2引用特性7.3常引用7.4引用的使用7.5传值、…...

假期刷题打卡--Day26

1、MT1212乘法表 请编写一个简单程序,输出九九乘法表。输入n,就输出乘法表到n的地方。 格式 输入格式: 输入整型 输出格式: 输出整型。形式如:1*11 样例 1 输入: 5输出: 1*11 2*12 …...

159基于matlab的基于密度的噪声应用空间聚类(DBSCAN)算法对点进行聚类

基于matlab的基于密度的噪声应用空间聚类(DBSCAN)算法对点进行聚类,聚类结果效果好,DBSCAN不要求我们指定集群的数量,避免了异常值,并且在任意形状和大小的集群中工作得非常好。它没有质心,聚类簇是通过将相邻的点连接…...

CVPR 2023: GANmouflage: 3D Object Nondetection with Texture Fields

我们使用以下6个分类标准对本文的研究选题进行分析: 1. 伪装类型: 自然伪装: 此类别关注受自然界伪装策略启发或直接复制的研究。这包括研究动物的体色、图案和纹理,为人工伪装的设计提供信息,通常以生物学真实性和有效性为目标 (例如,参考文献 [12, 19, 30, 48])。人工伪…...

【ASP.NET Core 基础知识】--部署和维护--日志记录和错误处理

一、日志记录(Logging) 1.1 日志记录的概念 日志记录是一种记录系统运行状态、活动和事件的重要机制。在软件开发和系统管理中,日志记录扮演着关键角色,用于追踪应用程序的执行过程、监视系统的健康状况、诊断问题和安全审计等。在ASP.NET Core等现代W…...

docker命令梳理

docker镜像操作 //从硬盘加入镜像 docker load -i xxx.tar //基于dockerfile构建镜像 docker build -t xxx:xxx . //查看镜像 docker images //镜像改名 docker tag //docker镜像提交到容器 //docker commit [-m“描述信息”] [-a“作者”]容器id 镜像名[:标签名] docker镜像仓…...

彩虹系统7.0免授权+精美WAP端模板源码

最低配置环境 PHP7.2 1、上传源码到网站根目录,导入数据库文件 2、修改数据库配置文件:/config.php 3、后台:/admin 账号: 4、前台用户:123456 密码:1234561...

linux系统haproxy负载均衡工具的介绍以及使用

haproxy 概述haproxy的特点haproxy算法haproxy做四层负载均衡haproxy做七层负载均衡 概述 ha-proxy是一款高性能的负载均衡软件。其专注于负载均衡这一些事情,因此与nginx比起来,负载均衡做的更好haproxy---主要是做负载均衡的7层,也可以做4…...

七、Nacos源码系列:Nacos服务发现

目录 一、服务发现 二、getServices():获取服务列表 2.1、获取服务列表 2.2、总结图 三、getInstances(serviceId):获取服务实例列表 3.1、从缓存中获取服务信息 3.2、缓存为空,执行订阅服务 3.2.1、调度更新,往线程池中…...

Vue源码系列讲解——模板编译篇【一】(综述)

目录 1. 前言 2. 什么是模板编译 3. 整体渲染流程 4. 模板编译内部流程 4.1 抽象语法树AST 4.2 具体流程 5. 总结 1. 前言 在前几篇文章中,我们介绍了Vue中的虚拟DOM以及虚拟DOM的patch(DOM-Diff)过程,而虚拟DOM存在的必要条件是得先有VNode&…...

【机器学习】数据清洗之识别异常点

🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步…...

MacOS 制作 TF 卡/ U 盘镜像

最近有张老的 TF 卡没办法直接拷贝里面的数据,于是打算利用 dd 工具直接全卡拷贝为镜像再分析里面的数据 在终端中,输入以下命令来列出所有磁盘设备: diskutil list这将显示Mac上所有的磁盘设备。你需要找到TF卡对应的设备,它通…...

怎么用postman调用webservice(反推SoapUI)

<soapenv:Envelope xmlns:soapenv“http://schemas.xmlsoap.org/soap/envelope/” xmlns:lis“LisDataTrasen”> soapenv:Header/ soapenv:Body lis:Test lis:test111111111</lis:test> </lis:Test> </soapenv:Body> </soapenv:Envelope> Conten…...

【开源】JAVA+Vue.js实现衣物搭配系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 衣物档案模块2.2 衣物搭配模块2.3 衣物收藏模块 三、系统设计3.1 用例设计3.2 E-R图设计3.3 数据库设计3.3.1 衣物档案表3.3.2 衣物搭配表3.3.3 衣物收藏表 四、系统实现4.1 登录页4.2 衣物档案模块4.3 衣物搭配模块4.4…...

【Flask + AI】接入CHATGLM API 实现翻译接口

【Flask AI】接入CHATGLM API 实现翻译接口 最近的项目中&#xff0c;需要加一个翻译功能&#xff0c;正好chatglm4发布了&#xff0c;于是决定着手用它实现。 https://chatglm.cn 准备 首先&#xff0c;在chatglm开发者中心申请api key&#xff0c;这里不再赘述 其次&…...

并发事务带来的问题及解决方法

引言 在数据库系统中&#xff0c;事务是指一组操作被视为一个逻辑单元&#xff0c;要么全部执行成功&#xff0c;要么全部不执行&#xff0c;保证数据库的一致性和完整性。而并发事务则是指多个事务同时执行的情况。虽然并发事务能够提高系统的性能和吞吐量&#xff0c;但也会…...

CRNN介绍:用于识别图中文本的深度学习模型

CRNN&#xff1a;用于识别图中文本的深度学习模型 CRNN介绍&#xff1a;用于识别图中文本的深度学习模型CRNN的结构组成部分工作原理 CRNN结构分析卷积层&#xff08;Convolutional Layers&#xff09;递归层&#xff08;Recurrent Layers&#xff09;转录层&#xff08;Transc…...

机器人运动学林沛群——变换矩阵

对于仅有移动&#xff0c;由上图可知&#xff1a; A P B P A P B o r g ^AP^BP^AP_{B org} APBPAPBorg​ 对于仅有转动&#xff0c;可得&#xff1a; A P B A R B P ^AP^A_BR^BP APBA​RBP 将转动与移动混合后&#xff0c;可得&#xff1a; 一个例子 在向量中&#xff…...

阿里云增加数据库访问白名单

阿里云增加数据库访问白名单 概况 我们希望在外网访问数据库时&#xff0c;可能会遇到无法连接的问题&#xff0c;这有可能是被拦截了。这时就需要去查看自己的ip有没有在白名单里面&#xff0c;没有的话就把ip加入到白名单。 路径 阿里云控制台-搜索RDS-进入RDS管理控制台…...

Rust基础拾遗--辅助功能

Rust基础拾遗 前言1.错误处理1.1 panic为什么是 Result 2. create与模块3. 宏4. 不安全代码5. 外部函数 前言 通过Rust程序设计-第二版笔记的形式对Rust相关重点知识进行汇总&#xff0c;读者通读此系列文章就可以轻松的把该语言基础捡起来。 1.错误处理 Rust 中的两类错误处理…...

【数据结构】双向链表(链表实现+测试+原码)

前言 在双向链表之前&#xff0c;如果需要查看单链表来复习一下&#xff0c;链接在这里&#xff1a; http://t.csdnimg.cn/Ib5qS 1.双向链表 1.1 链表的分类 实际中链表的结构非常多样&#xff0c;以下情况组合起来就有8种链表结构&#xff1a; 1.1.1 单向或者双向 1.1.2 …...