网页截图快捷键是哪个,做母婴育儿类网站好做seo排名吗,企业官网开发排行榜,网站开发前端需要学什么天行健#xff0c;君子以自强不息#xff1b;地势坤#xff0c;君子以厚德载物。 每个人都有惰性#xff0c;但不断学习是好好生活的根本#xff0c;共勉#xff01; 文章均为学习整理笔记#xff0c;分享记录为主#xff0c;如有错误请指正#xff0c;共同学习进步。… 天行健君子以自强不息地势坤君子以厚德载物。 每个人都有惰性但不断学习是好好生活的根本共勉 文章均为学习整理笔记分享记录为主如有错误请指正共同学习进步。 文章目录 一、介绍二、配置三、使用 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.skiptrue表示跳过单元测试- mvn clean package -Dmaven.test.skiptrue#4清空并打包跳过单元测试#- mvn clean package -Dmaven.test.skiptrue#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自动化部署 感谢阅读祝君暴富