gitlab-runner集成CI/CD完整项目部署

news2024/11/20 4:29:40

目录

1.环境安装

2.gitlab代码仓库搭建

3.gitlab-runner-安装以及注册

4..gitlab-ci.yml脚本

 5.脚本说明

6.build.sh

7.test.sh

8. deploy.sh

9.运行流水线

10.选择流水线分支

11.查看运行阶段

12.查看运行日志

13.查看服务器真实日志


1.环境安装

        确保服务器的Java环境、数据库、缓存数据库等应用软件成功安装。

2.gitlab代码仓库搭建

        在服务器搭建安装gitlab应用软件,上传相应的项目代码。

3.gitlab-runner-安装以及注册

        往期博文有提及,我就不再赘述了

4..gitlab-ci.yml脚本

        在项目根目录下编写.gitlab-ci.yml脚本,完成项目CI/CD的集成。

stages:
    - build
    - test
    - deploy

build_job:
    stage: build

    tags:
        - tag
    script:
        - echo "Building the project..."
        - chmod +x build.sh  # 确保在运行脚本前添加执行权限
        - ./build.sh
    artifacts:
        paths:
            - build.log
            - package.log
test_job:
    stage: test
    tags:
        - tag
    script:
        - echo "Running tests..."
        - chmod +x test.sh  # 确保在运行脚本前添加执行权限
#        - ./test.sh

deploy_job:
    stage: deploy
    tags:
        - tag
    script:
        - echo "Deploying application..."
        - chmod +x deploy.sh  # 确保在运行脚本前添加执行权限
        - ./deploy.sh
    only:
        - testmain

 5.脚本说明

        5.1  stages 水线包含三个阶段:构建(build)、测试(test)和部署(deploy)。每个阶段都有一个或多个作业(job),这些作业会按照阶段的顺序执行

        5.2  build_job:
        stage: build: 指定了这个作业属于build阶段。
        tags: - tag: 指定了执行此作业的runner需要匹配的标签。只有带有tag标签的runner才会执行这个作业。
        script: 是一个命令列表,它们会被依次执行。在这个例子中,脚本打印了一条消息表示正在构建项目,然后给build.sh脚本添加了执行权限,并运行了它。
        artifacts: 指定了当作业成功完成后要保存的文件。这里指定了build.log和package.log两个文件将会被保留下来,可以在后续阶段使用或者作为构建结果查看。
        test_job:
        stage: test: 表示这是test阶段的一个作业。
        tags: - tag: 同样地,指定了执行此作业所需的runner标签。
        script: 打印一条消息表示正在运行测试,给test.sh脚本添加执行权限,但注释掉了实际运行test.sh脚本的那一行(# - ./test.sh)。如果这一行没有被注释掉,那么就会执行test.sh脚本来运行测试。
        deploy_job:
        stage: deploy: 这是一个deploy阶段的作业。
        tags: - tag: 和上面一样,指定runner标签。
        script: 打印一条消息表示正在部署应用,给deploy.sh脚本添加执行权限,并运行它来进行部署。
        only: - testmain: 这个关键字限制了deploy_job只会在特定条件下运行。这里的意思是,只有当推送的是testmain分支时,才会触发这个部署作业。
请注意,如果你希望在test_job中实际运行测试脚本,你需要移除那一行前面的#号。同样,only关键字现在已经被更灵活的rules关键字所取代,因此在较新的GitLab版本中可能推荐使用rules来替代only

6.build.sh

#!/bin/sh
# 尝试更改 Maven 本地仓库的权限
echo '尝试更改 Maven 本地仓库的权限...'
chown -R gitlab-runner:gitlab-runner /home/software/maven/rep || {
  echo '更改所有者和所属组失败!请检查错误信息。'
  exit 1
}

# 设置适当的权限
chmod -R 775 /home/software/maven/rep || {
  echo '更改权限失败!请检查错误信息。'
  exit 1
}

#cd  jetlinks-standalone
# 编译项目并打包,将详细日志输出到文件
echo '开始清理并打包...'
mvn clean install -DskipTests > /home/logs/build.log 2>&1 || {
  echo '打包失败!请检查错误信息。'
  cat build.log
  exit 1
}
echo '完成clean且打包'

echo '开始编译'
mvn compile


echo '开始打包...'
mvn clean package -DskipTests > /home/logs/package.log 2>&1
if [ $? -ne 0 ]; then
  echo '打包失败!请检查错误信息。'
  cat package.log
  exit 1
fi
echo '完成打包!'

echo '查找路径:'
cd   jetlinks-standalone/target/
echo '赋予执行权限'
chmod +x jetlinks-standalone.jar
echo '展示文件'
ls
echo '拷贝到项目目录下'
cp jetlinks-standalone.jar    /home/gitProjects/
echo '开始执行jar包'
#nohup java -jar /home/gitProjects/jetlinks-standalone.jar > /home/logs/jetlinks.log 2>&1 &
#nohup java  -Xmx4G -jar /home/gitProjects/jetlinks-standalone.jar  --env=test > /home/logs/jetlinks.log 2>&1 &

chmod 777 /home/logs/jetlinks.log

7.test.sh

#!/bin/sh
# 运行单元测试
mvn test
chmod +x test.sh

8. deploy.sh

#!/bin/sh
# 定义变量
JAR_FILE="/home/gitProjects/jetlinks-standalone.jar"
LOG_FILE="/home/logs/jetlinks.log"
ENV="test"

## 确保日志目录存在
#mkdir -p /home/logs
#chmod 755 /home/logs

# 查找并终止正在运行的 jetlinks-standalone.jar 进程
pids=$(jps -l | grep "$JAR_FILE" | awk '{print $1}')
if [ -n "$pids" ]; then
  for pid in $pids; do
    echo "Stopping process with PID: $pid"
    kill -9 $pid
  done
fi
echo '正在停止 JetLinks standalone 相关程序....'

# 启动新的 JAR 文件实例
nohup java -Xmx4G -jar $JAR_FILE --env=$ENV > $LOG_FILE 2>&1 &
echo '项目重启成功!'

echo "JetLinks standalone application started."

9.运行流水线

10.选择流水线分支

11.查看运行阶段

12.查看运行日志

13.查看服务器真实日志

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

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

相关文章

Python_异常机制

软件程序在运行过程中,非常可能遇到刚刚提到的这些问题,我们称之为异常,英文是:Exception,意思是例外。遇到这些例外情况,或者叫异常,我们怎么让写的程序做出合理的处理,安全的退出&…

Footprint Growthly Quest 工具:赋能 Telegram 社区实现 Web3 飞速增长

作者:Stella L (stellafootprint.network) 在 Web3 的快节奏世界里,社区互动是关键。而众多 Web3 社区之所以能够蓬勃发展,很大程度上得益于 Telegram 平台。正因如此,Footprint Analytics 精心打造了 Growthly —— 一款专为 Tel…

Tkinter制作登录界面以及登陆后页面切换

Tkinter制作登录界面以及登陆后页面切换 前言序言1. 由来2. 思路3. 项目结构描述4. 项目实战1. 登录界面实现(代码)2. 首页界面实现(代码)3. 打包build.py(与main.py同级目录)4. 打包安装包 前言 本帖子&a…

【nrm】npm 注册表管理器

nrm是什么 nrm(NPM Registry Manager)是一个用于管理 Node.js 包管理器(如 npm 和 Yarn)的注册表工具。它可以帮助用户快速切换不同的 npm 源,以便于提高包安装的速度和效率,特别是在中国大陆地区&#xf…

Ubuntu23.10下处理libncurses5-dev包的安装问题

Ubuntu23.10下处理libncurses5-dev包的安装问题 导语环境准备问题和解决方案总结参考文献 导语 使用Ubuntu23.10的时候,遇到需要termios的场景,结果发现无论是codeblocks还是系统本身的gcc都无法找到term.h和curse.h,网上找了很多解决方案都…

了解云计算工作负载保护的重要性,确保数据和应用程序安全

云计算de小白 云计算技术的快速发展使数据和应用程序安全成为一种关键需求,而不仅仅是一种偏好。随着越来越多的客户公司将业务迁移到云端,保护他们的云工作负载(指所有部署的应用程序和服务)变得越来越重要。云工作负载保护&…

【stm32】TIM定时器输出比较-PWM驱动LED呼吸灯/舵机/直流电机

TIM定时器输出比较 一、输出比较简介1、OC(Output Compare)输出比较2、PWM简介3、输出比较通道(高级)4、输出比较通道(通用)5、输出比较模式6、PWM基本结构配置步骤:程序代码:PWM驱动LED呼吸灯 7、参数计算8、舵机简介程序代码&am…

nginx 安装(Centos)

nginx 安装-适用于 Centos 7.x [rootiZhp35weqb4z7gvuh357fbZ ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.9.2009 (Core) Release: 7.9.2009 Codename: Core# 创建文件…

大模型训练:K8s 环境中数千节点存储最佳实践

今天这篇博客来自全栈工程师朱唯唯,她在前不久举办的 KubeCon 中国大会上进行了该主题分享。 Kubernetes 已经成为事实的应用编排标准,越来越多的应用在不断的向云原生靠拢。与此同时,人工智能技术的迅速发展,尤其是大型语言模型&…

智慧政务助力实现服务民生新突破

在数字化转型的浪潮中,中国移动紧密结合人工智能(AI)技术,推动政务服务的智能化升级。近日,中国移动正式发布政务大模型3.0版本,以科技创新提升政务效率,实现服务民生的新突破。 为什么…

【Android】页面启动耗时统计流程梳理

文章基于Android 11 写在前面: 最近的文章都会放流程图,时序图之类的图片,解释下为什么这么做: 图片的好处: 流程清晰,一目了然很多代码,如同老太太的裹脚布,又臭又长。影响理解&a…

Python的Pandas库学习指南

应用场景 Pandas库因其强大的数据处理和分析能力,在数据科学和数据分析领域有着广泛的应用。 1. 数据清洗 处理缺失数据:通过删除或填充缺失值来清洗数据。数据类型转换:将数据转换为合适的格式,例如将日期字符串转换为日期类型…

k8s_资源管理介绍

资源管理介绍 在k8s中,所有内容都抽象成资源,用户需要通过操作资源来管理k8s k8s本身就是一个集群系统,用户可以在集群中部署服务,在k8s集群中运行一个个的容器,将指定的程序部署到容器中 k8s最小的管理单元是pod&…

AI-Talk开发板之wifi scan

一、说明 AI-Talk开发板使用ESP32-C3扩展WIFI通信功能,与CSK6011A通过SPI接口通信。 与处理器的信号连接: ESP32-C3需要烧录hosted固件,参考:AI-Talk开发板更新ESP32固件_esp32 固件-CSDN博客 二、工程 1、创建项目 进入exampl…

本地编译安装|编译安装最新版postgis3.4.3版本指南

一、本地编译安装步骤介绍 本地编译,指的是在本地环境编译安装某个软件,例如,本文所述的最新版postgis3.4.3,本地是什么cpu架构,编译完成后,编译产出物就可以在其它的同cpu架构的服务器上直接适用了&#…

关于JAVA中Scanner和sout读取超时问题

1.Scanner与System.out为什么慢 Scanner读取速度慢的原因: 在ACM模式下,输入数据和输出数据时,他会将数据放在一个文件里面 在new上一个Scanner时,去调用一个next()方法,他会去访问IO设备&…

【mac开发入坑指南】能让你的终端好用一万倍的神仙组合iTerm2 + oh-my-zsh

介绍 iTerm2 iTerm2是默认终端的替代品,也是目前Mac系统下最好用的终端工具,集颜值和效率于一身。 Oh-My-Zsh Oh My Zsh 是一款社区驱动的命令行工具,正如它的主页上说的,Oh My Zsh 是一种生活方式。 它基于Zsh 命令行&#xff0c…

docker-文件复制(docker ps:用于在Docker主机和容器之间拷贝文件或目录)

文章目录 1、把宿主机的文件复制到容器内部1.1、查询 宿主机 root 下的文件1.2、docker cp /root/anaconda-ks.cfg spzx-redis:/root1.3、查看 spzx-redis 容器 中/root目录下是否有 anaconda-ks.cfg 文件 2、把容器中的文件 复制 到宿主机中2.1、查看 spzx-redis 容器 / 下的文…

怎么批量制作文本或链接静态码?批量静态码在线的生成技巧

怎么将文本或者链接做成静态二维码呢?有很多的场景都会使用静态二维码,在需要制作大量静态二维码时,有什么方法能够快速提高二维码制作效率呢?在网上能够找到在线二维码生成器的功能来快速生成二维码,下面通过这篇文章…

【shell脚本8】Shell脚本学习--其他

目录 ​编辑 Shell输入输出重定向 重定向深入讲解 Here Document Shell输入输出重定向 Unix 命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示。一般情况下,标准输入设备就是键盘,标准输出设备就是终端&…