当前位置:

首页 > 编程开发 > Gitlab CI-CD自动化部署SpringBoot项目的方法

Gitlab CI-CD自动化部署SpringBoot项目的方法

一、概述本文主要记录如何通过GitlabCI/CD自动部署SpringBoot项目jar包。二、前期准备准备三台CentOS7服务器,分别部署以下服务:序号系统IP服务1CentOS7192.168.56.10Gitlab2CentOS7192.168.56.11Runner(安装Docker)3CentOS7192.168.56.12SpringBoot项目jar包(安装jdk、maven等)上述服务也可以只用一台CentOS7,将所有程序都部署在同一机器上,但是更建议分开部署;三、总体架构图说明:Gi

本文目录

    一、概述

    本文主要记录如何通过Gitlab CI/CD自动部署SpringBoot项目jar包。

    二、前期准备

    准备三台 CentOS7服务器,分别部署以下服务:

    序号系统IP服务
    1CentOS7192.168.56.10Gitlab
    2CentOS7192.168.56.11Runner (安装Docker)
    3CentOS7192.168.56.12SpringBoot 项目 jar 包(安装jdk、maven等)

    上述服务也可以只用一台CentOS7,将所有程序都部署在同一机器上,但是更建议分开部署;

    三、总体架构图

    Gitlab CI-CD自动化部署SpringBoot项目的方法

    说明:

    • Gitlab Server 用于部署Gitlab远程仓库,对CPU和内存要求比较高,建议4核CPU,4GB以上内存;

    • Runner Server 用于部署执行.gitlab-ci.yml 文件中定义的 stage(阶段);需要具有访问 Gitlab 仓库的权限,可以下载代码,通过注册方式(gitlab-runner register)实现;

    • Your Laptop Server 用户部署你的应用程序,这里就是SpringBoot的 jar 包,需要提前安装 JDK 和 Maven 并配置好环境变量;

    四、环境搭建

    1、环境准备(可选)

    三台服务器执行以下命令:

    yum -y upgrade
    yum -y install wget
    yum -y install vim

    2、Gitlab安装

    参考地址:
    https://about.gitlab.com/install/#centos-7
    https://www.xieniao.com/article/188877.htm

    (1)安装并配置必要的依赖

    sudo yum install -y curl policycoreutils-python openssh-server
    sudo systemctl enable sshd
    sudo systemctl start sshd
    
    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --permanent --add-service=https
    sudo systemctl reload firewalld

    (2)安装邮件服务

    sudo yum install postfix
    sudo systemctl enable postfix
    sudo systemctl start postfix

    (3)添加 gitlab 镜像

    wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-13.4.0-ce.0.el7.x86_64.rpm

    (4)安装 gitlab 安装命令

    rpm -i gitlab-ce-13.4.0-ce.0.el7.x86_64.rpm --nodeps --force

    安装成功后图片:

    Gitlab CI-CD自动化部署SpringBoot项目的方法

    (5)修改gitlab配置文件指定服务器ip和自定义端口

    vim  /etc/gitlab/gitlab.rb

    (6)重置并启动GitLab

    gitlab-ctl reconfigure
    gitlab-ctl restart

    提示 "ok: run:"表示启动成功

    (7)访问 GitLab页面

    如果报502,等待一段时间后再刷新试试,一般1-2分钟左右。

    Gitlab CI-CD自动化部署SpringBoot项目的方法

    本文设置的账号:root ,新密码:11112222

    3、安装 Runner

    (1)下载一个二进制文件

    sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

    (2)修改执行权限

    sudo chmod a+x /usr/local/bin/gitlab-runner

    (3)创建 GitLab CI 用户

    sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

    (4)安装并作为服务运行

    sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
    sudo gitlab-runner start

    如果遇到提示 sudo: gitlab-runner: command not found,切换到 root 用户,可以去掉 sudo 执行上面命令。

    (5)注册 Runner

    参考地址:https://docs.gitlab.com/runner/register/index.html
    执行 gitlab-runner register 命令:

    [root@localhost bin]# gitlab-runner register
    Runtime platform                                    arch=amd64 os=linux pid=21527 revision=4e1f20da version=13.4.0
    Running in system-mode.
    
    Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
    http://192.168.56.10/
    
    Please enter the gitlab-ci token for this runner:
    PwF1sZPX_zsB-xChSKjH
    
    Please enter the gitlab-ci description for this runner:
    [localhost.localdomain]: test ci cd desc
    
    Please enter the gitlab-ci tags for this runner (comma separated):
    my-tag,other-tag
    
    Registering runner... succeeded                     runner=PwF1sZPX
    Please enter the executor: ssh, virtualbox, parallels, shell, docker-ssh, docker+machine, docker-ssh+machine, kubernetes, custom, docker:
    docker
    
    Please enter the default Docker image (e.g. ruby:2.6):
    maven:3.3.9-jdk-8
    Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

    注:这里选择的docker方式,所以服务器上还需要额外多安装docker

    #!/bin/bash
    # 移除掉旧的版本
    sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-selinux \
                      docker-engine-selinux \
                      docker-engine
    
    # 删除所有旧的数据
    sudo rm -rf /var/lib/docker
    
    #  安装依赖包
    sudo yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2
    
    # 添加源,使用了阿里云镜像
    sudo yum-config-manager \
        --add-repo \
        http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    # 配置缓存
    sudo yum makecache fast
    
    # 安装最新稳定版本的docker
    sudo yum install -y docker-ce
    
    # 配置镜像加速器
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["http://hub-mirror.c.163.com"]
    }
    EOF
    
    # 启动docker引擎并设置开机启动
    sudo systemctl start docker
    sudo systemctl enable docker
    
    # 配置当前用户对docker的执行权限
    sudo groupadd docker
    sudo gpasswd -a ${USER} docker
    sudo systemctl restart docker

    这里注册一个全局共享的 Runner(管理员权限,复制服务器地址和 Token),所有项目都可以使用,或者也可以注册项目级别单独的 Runner (进入项目 Runner 设置页面,复制地址和 Token)。

    Gitlab CI-CD自动化部署SpringBoot项目的方法

    注册成功后,Runner 列表可以查看到注册的 Runner

    Gitlab CI-CD自动化部署SpringBoot项目的方法

    勾选:Run untagged jobs Indicates whether this runner can pick jobs without tags

    Gitlab CI-CD自动化部署SpringBoot项目的方法

    4、安装应用服务器环境

    (1)允许用户远程登录(可选)

    vi /etc/ssh/sshd_config
    修改:
    PasswordAuthentication yes                      
    PermitRootLogin yes
    
    重启服务:
    service sshd restart

    (2)安装JDK1.8

    (2)解压

    tar -zxvf jdk-8u161-linux-x64.tar.gz
    重命名:
    mv jdk1.8.0_161 java1.8

    (3)配置环境变量

    vi /etc/profile
    
    添加以下内容:
    export JAVA_HOME=/usr/local/java1.8
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    保存退出
    
    source /etc/profile
    java -version

    (3) 安装 Maven3.3.9

    (2)解压

    tar -zxvf apache-maven-3.3.9-bin.tar.gz 
    
    重命名:
    mv apache-maven-3.3.9 maven-3.3.9

    (3)配置环境变量

    vi /etc/profile
    
    添加以下内容:
    export MAVEN_HOME=/usr/local/maven-3.3.9
    export PATH=$MAVEN_HOME/bin:$PATH
    保存退出
    
    source /etc/profile
    mvn -v

    五、创建 SpringBoot 项目

    1、使用Gitlab Spring 模板快速创建一个 SpringBoot 项目;

    Gitlab CI-CD自动化部署SpringBoot项目的方法

    Gitlab CI-CD自动化部署SpringBoot项目的方法

    如果报错,删除pom.xml中的这行

    报这个错的话:
    [FATAL] Non-resolvable parent POM for com.example:demo:0.0.1-SNAPSHOT: Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:2.0.1.RELEASE from/to central (https://repo.maven.apache.org/maven2): Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.40.215] failed: Connection timed out (Connection timed out) and ‘parent.relativePath' points at wrong local POM @ line 14, column 10

    修改版本
    1.5.9.RELEASE

    2、添加环境变量(登录应用服务器密码)

    注: 其中 ssh_password 这个添加到环境变量中,取消勾选 Protect Branch (仅保护分支);修改和添加都是默认勾选,需要取消,否则,其他分支不能读取到该变量;

    Gitlab CI-CD自动化部署SpringBoot项目的方法

    先在应用服务器上创建一个目录,用于上传存放项目 jar 包:

    mkdir gitlab-project

    添加 .gitlab-ci.yml 文件时,可以先再 CI/CD Pipeline 中 的 CI Lint 中检验 .gitlab-ci.yml 文件格式

    # 定义一些变量, 下面各阶段会使用
    variables:
      server_ip: 192.168.56.12
      jar_name: demo-0.0.1-SNAPSHOT.jar
      java_path: /usr/local/java1.8/bin
      upload_path: /usr/local/gitlab-project
    
    # 定义执行的各个阶段及顺序
    stages:
      - build
      - upload
      - deploy
    
    # 使用 maven 镜像打包项目
    maven-build:
      stage: build
      image: maven:3.5.0-jdk-8
      script:
        - mvn package -B -Dmaven.test.skip=true
      cache:
        key: m2-repo
        paths:
          - .m2/repository
      artifacts:
        paths: 
          - target/$jar_name
    
    # 上传生成的 jar 包到你的应用服务器,这里使用 ictu/sshpass 这个镜像,是为了使用 sshpass 命令
    upload-jar:
      stage: upload
      image: ictu/sshpass
      script: 
        - ls -l target/
        - sshpass -p $ssh_password scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no target/$jar_name root@$server_ip:$upload_path/$jar_name
    
    # 启动 SpringBoot jar包
    deploy-test:
      stage: deploy
      image: ictu/sshpass
      script:
        - sshpass -p $ssh_password ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@$server_ip "nohup $java_path/java -jar $upload_path/$jar_name >/dev/null 2>&1 &"

    这里使用了DockerHub上面的一个公共镜像(ictu/sshpass),主要是想使用启动自带的sshpass命令执行scp和ssh命令。
    如果一切顺利的话,就会自动触发 CI/CD ;失败的话查看报错信息,可使用 Debug 模式执行调试命令 。

    [root@localhost gitlab-project]# jps
    22119 Jps
    22073 demo-0.0.1-SNAPSHOT.jar
    [root@localhost gitlab-project]# curl localhost:8080
    Spring is here!

    Gitlab CI-CD自动化部署SpringBoot项目的方法

    可能遇到的问题总结:

    1. 权限问题:可以先使用 root 用户看看是不是权限问题导致,如果是的话,提升执行用户的权限;并发问题:这里没有修改 Runner 的并发数,可以修改同时可以进行的任务并发数;其他问题:读取不到配置的环境变量,取消勾选仅保护分支的选项;

    2. 未执行job:没有勾选未配置 tags 也执行选项;

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 gitlab
    相关文章 更多
    GitLab配置SSH免密登录步骤详解
    GitLab配置SSH免密登录步骤详解

    通过本教程学习如何在Windows、Mac或Linux系统中生成SSH密钥,并将公钥安全添加到GitLab平台,实现Git操作的免密认证,简化日常代码管理流程。

    GitLab新手创建项目并推送第一次提交的操作指南
    GitLab新手创建项目并推送第一次提交的操作指南

    本文指导GitLab新手完成创建项目并推送第一次提交的最小闭环。涵盖远程项目创建、本地仓库初始化、添加远程地址及执行git push。重点说明HTTPS与SSH认证差异、分支名(master/main)核对及提交验证标准,确保远程仓库真正建立。

    Linux环境下部署Gitlab Runner配合k8s实现自动发布(CI/CD)
    Linux环境下部署Gitlab Runner配合k8s实现自动发布(CI/CD)

    Gitlab Runner注册失败主因是ServiceAccount权限不足或网络不通;CI中kubectl失败因缺少二进制或kubeconfig;DinD误用致Job Pending;发布后CrashLoopBackOff因CI不校验Pod就绪状态。 在Kubernetes上搭建GitLab CI

    PHP入门指南:PHP和GitLab
    PHP入门指南:PHP和GitLab

    随着互联网的快速发展,网站开发成为了一个热门的行业。而作为网站开发中的一项十分重要的技术,PHP也越来越受到开发者的关注。同时,为了更好地管理和协作项目,GitLab也逐渐成为了常见的项目管理工具。本文将介绍PHP入门指南中的一项重要内容——PHP和GitLab的结合,希望对初学者有帮助。什么是PHP?PHP是一种流行的服务器端脚本语言,最初是为了动态创建网

    在不联网的情况下安装中文版的GitLab于CentOS
    在不联网的情况下安装中文版的GitLab于CentOS

    1.下载gitlab安装包从【清华大学开源软件镜像站】下载最新中文版gitlab安装包,安装包里自带了简体中文汉化包。从【gitlab官网】下载gitlab最新安装包。2.安装gitlab以gitlab-ce-14.9.4-ce.0.el7.x86_64为例,将其上传至centos服务器使用yum安装gitlabyum-yinstallgitlab-ce-14.3.2-ce.0.el7.x86_64.rpm使用yum安装gityum-yinstallgit#安装git修改gitlab配置文件vim/etc

    springBoot项目常用目录有哪些
    springBoot项目常用目录有哪些

    springBoot项目常用目录springBoot项目的目录结构及名规范介绍基于SpringBoot开发时的目录结构及命名规范,通过介绍能够为你解决,在实际项目中如何规划目录结构?如何命名目录更规范?各个目录分别代表什么含义?等三个问题。目录说明servicex//项目名|-admin-ui//管理服务前端代码(一般将UI和SERVICE放到一个工程中,便于管理)|-servicex-auth//模块1|-servicex-common//模块2|-servicex-gateway//模块3|-serv

    CentOS7上搭建GitLab仓库的详细步骤
    CentOS7上搭建GitLab仓库的详细步骤

    在CentOS7上搭建自己的GitLab仓库的详细步骤如下:更新系统:在开始之前,确保您的系统已经更新到最新版本。打开终端,并执行以下命令:sudoyumupdate-y安装依赖:在安装GitLab之前,需要安装一些依赖项。执行以下命令来安装所需的软件包:sudoyuminstall-ycurlpolicycoreutils-pythonopenssh-server添加GitLab仓库:执行以下命令来添加GitLab仓库的GPG密钥:curl|sudobash安装GitLab:执行以下命令来安装GitLa

    CentOS7系统上安装与部署GitLab的详细教程
    CentOS7系统上安装与部署GitLab的详细教程

    GitLab是一个基于Git的版本管理系统,可以提供代码仓库、代码审核、问题跟踪等功能。下面是CentOS7系统上安装GitLab的步骤:安装依赖sudoyuminstallcurlpolicycoreutilsopenssh-serveropenssh-clientssudosystemctlenablesshdsudosystemctlstartsshdsudofirewall-cmd--permanent--add-service=httpsudosystemctlreloadfirewalld安装

    展望Java Git版本控制工具的未来发展路径
    展望Java Git版本控制工具的未来发展路径

    Javagit是一款专为Java开发者设计的代码版本控制系统,它为Java应用的开发提供了一套完整而强大的版本控制机制。近年来,JavaGit在全球范围内获得了广泛的应用,成为众多开发者和团队的首选版本控制工具。代码管理:在代码管理方面,JavaGit可以帮助开发者更好地追踪和管理代码变更。通过创建分支、提交记录、合并请求等功能,JavaGit可以确保代码版本始终处于有序和可控的状态。同时,JavaGit还提供了强大的冲突解决机制,即使在多名开发者同时对同一份代码进行修改的情况下,也能轻松解决代码冲突。演

    GitLab:PHP持续集成中的 DevOps 强力引擎
    GitLab:PHP持续集成中的 DevOps 强力引擎

    1.GitLabCI的优势gitLabCI提供了一系列优势,使开发人员能够简化和自动化PHP开发工作流程:自动化构建和测试:GitLabCI触发自动构建和测试,从而减少人工错误并节省时间。持续集成:通过定期将代码更改合并到主分支,GitLabCI确保代码始终保持可部署状态。持续交付:GitLabCI促进持续交付实践,使团队能够快速、安全地向生产环境部署代码。检测错误和问题:GitLabCI运行一系列测试和检查,以检测错误、问题和代码质量问题。2.GitLabCI的功能GitLabCI提供了丰富的功能,满足

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。