十分钟完成Springboot 生产环境搭建、代码仓库安装、自动打包部署(密码登录)

十分钟完成Springboot 生产环境搭建、代码仓库安装、自动打包部署

本文为了让新手更容易的体验持续部署的整个过程,故登录 Linux 采用密码登录方式。整个体验过程全部在网页中进行操作,教程每一步都提供了截图,即使没有开发基础也可以完成项目的打包部署。

如果你选择使用证书登录方式,可以参考本篇文章的证书登录版本

本教程以 Springboot 官方的 HelloWorld 项目为例,教你掌握Springboot项目生产环境搭建、持续集成环境搭建。

通过此教程,你将获得:

  • Gitlab 代码托管环境

  • Gitlab CI/CD 环境

  • Springboot 生产环境

  • Springboot 项目自动打包部署环境

GitLab 自动打包部署流程如下图,开发者提交代码到GitLab后,会触发编译、构建,然后部署到服务器上。

image-20220426150029370

整个过程采用 CSDN 开发云 搭建,如果你仅仅想学习体验Springboot 生产环境搭建、代码仓库安装、自动打包部署,可以选择按小时计费,体验完毕后释放相关资源,花费只有几元钱

准备两台主机

购买gitlab 主机

gitlab 主机用于托管项目代码,打包部署项目

访问云主机创建页面,在【镜像市场】选择【Gitlab】

image-20220420173659292

【主机规格】选择4GB/2CPU的以上配置。配置越高,支持的并发用户越多,打包构建的速度越快。gitlab 官方推荐配置是 4GB/4CPU。

注意:2GB 的主机可能安装完就卡死,访问页面一直是 502,根本无法使用。

image-20220421095339435

【登录凭证】选择root 密码。此密码是 CSDN 开发云随机生成的强密码,系统并不会保存你的密码。

请妥善保存您的密码。忘记密码可以在主机控制台重置密码。

image-20220427153342323

【弹性公网】选择固定带宽。带宽选择越大,打包构建的速度越快。

image-20220420174454347

如果你仅仅想体验部署过程,可以选择【按小时计费】,整个花费只有几元钱

image-20220422094739576

配置完成后,点击页面底部的【立即购买】

完成购买后,在主机列表可以看到主机的 IP 地址。这个 IP是 gitlab 主机的 ip 地址,下面的配置中会用到。

image-20220420174803254

购买Web 主机

Web 主机用于运行 Springboot 项目

访问云主机创建页面,在【镜像市场】选择【Springboot】,主机规格可选最低规格,其他配置同 gitlab 主机。

image-20220420173525974

配置 hosts 文件

配置本机的 hosts,文本中的ip 地址用你的主机 ip 替换。

此步骤可以跳过,以下步骤中直接使用主机的 ip 地址。

116.196.118.125 gitlab
116.196.115.37 web

配置 gitlab

gitlab 第一次使用时需要经过较长时间初始化,一般需要 5-10 分钟时间,请耐心等待,等待时间长短和主机的配置相关。

修改密码

在浏览器地址栏输入 http://gitlab ,访问 上一步购买的gitlab 主机。若访问 gitlab 页面上出现502错误,说明 gitlab 服务正在初始化服务,请稍后再试。

image-20220420150739878

输入用户名 root ,密码 H9ZjJo8jmb1p+2FAEJiA1Mv/ODHyj7JmGpe7joeGiJU=,点击 【Sign in】

成功登录系统后,为了系统安全。请访问 http://gitlab/-/profile/password/edit 修改密码。

HelloWorld 项目代码托管

本次演示的 Springboot HelloWorld 项目,来自 spring 官网教程,是最简单的 Springboot Web 项目,适合初学者入门 Springboot。查看教程地址点击这里

代码仓库托管在 github 上,由于有些时候访问 github 速度比较慢,我们将项目 clone 到了 gitcode

代码仓库的地址是

https://gitcode.net/hjue/gs-spring-boot.git

新建项目gs-spring-boot

点击页面顶部的➕,选择 【新建项目/仓库】

image-20220420152216735

选择【导入项目】

image-20220420152315015

选择 【从 URL 导入仓库】

image-20220420152401985

Git 仓库URL 中输入 https://gitcode.net/hjue/gs-spring-boot.git ,拖动到页面底部,点击【新建项目】

image-20220420152650704

等待不足 1 分钟的时间,即可看到项目主页。

项目代码打包部署

配置部署变量

接下来我们进行项目的配置

image-20220420152937793

点击左侧边栏菜单的【设置】-> 【CI/CD】

image-20220420153137426

点击【变量】->【添加变量】

image-20220420153251700

键输入 SSHPASS ,值 粘贴web应用服务器的root 用户密码,点击【添加变量】。

image-20220428170041858

按照上面的步骤添加APP_HOST变量。键输入APP_HOST,值输入你 Web 服务器的 IP 地址

image-20220420153846704

完成变量添加后,页面显示如下

image-20220420153945016

添加部署脚本

点击左上角项目名称跳转到项目首页

image-20220420154147626

创建web部署服务配置

点击➕,选择【新建文件】

image-20220420154351797

文件名 .gitlab-ci/hello-world.service ,内容粘贴以下内容。注意检查文件名末尾不要有空格。

[Unit]
Description=hello-world
After=syslog.target

[Service]
User=root
ExecStart=/usr/local/apps/hello-world/run.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

image-20220420154732824

滚动到页面底部,点击【Commit changes】。可以看到文件创建成功。

image-20220420154922649

创建运行 springboot 项目脚本

重新回到项目首页,再次添加文件.gitlab-ci/run.sh

文件内容如下:

#!/bin/bash
cd /usr/local/apps/hello-world
java -jar hello-world.jar

image-20220420155211810

添加持续集成配置

添加文件 .gitlab-ci.yml,文件内容如下:

stages:
  - build
  - deploy
  
maven-build:
  image: maven:3-jdk-8
  stage: build
  script: 
    - cd complete    
    - mvn clean package -B -Dmaven.test.skip=true
  artifacts:
    paths:
      - complete/target/*.jar

production:
  image: maven:3-jdk-8
  stage: deploy
  before_script:
    - 'wget https://dev-docs-image.s3.cn-north-1.jdcloud-oss.com/files/sshpass_1.06-1_amd64.deb'
    - 'dpkg -i  sshpass_1.06-1_amd64.deb'
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh    
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'  
  script:
    # 在 web 服务器上创建应用目录
    - sshpass -e ssh root@$APP_HOST "[[ -d /usr/local/apps/hello-world ]] || { mkdir -p /usr/local/apps/hello-world; }"
    # 将应用部署启动脚本到 web 服务器上
    - cat .gitlab-ci/run.sh | sshpass -e ssh root@$APP_HOST "cat > /usr/local/apps/hello-world/run.sh; chmod +x /usr/local/apps/hello-world/run.sh"
    # 复制 jar 文件到服务器
    - sshpass -e scp complete/target/spring-boot-complete-0.0.1-SNAPSHOT.jar root@$APP_HOST:/usr/local/apps/hello-world/hello-world.jar
    # 部署应用为系统服务
    - cat .gitlab-ci/hello-world.service | sshpass -e ssh root@$APP_HOST "cat > ./hello-world.service "
    - sshpass -e ssh root@$APP_HOST "[[ -f /usr/lib/systemd/system/hello-world.service ]] || { mv ./hello-world.service /usr/lib/systemd/system/hello-world.service && systemctl daemon-reload && systemctl enable hello-world.service; }"
    - sshpass -e ssh root@$APP_HOST "[[ -f ./hello-world.service ]] && { rm ./hello-world.service; }"
    # 重启应用服务
    - sshpass -e ssh root@$APP_HOST "systemctl restart hello-world"
    # 查看服务状态
    - sshpass -e ssh root@$APP_HOST "systemctl status hello-world"
  only:
  - main


文件创建成功后,回到项目首页。可以看到项目正在构建。

第一次构建比较慢,一般需要 20 分钟左右,构建的速度和你 gitlab 主机的配置及带宽相关。由于 csdn gitlab 镜像已经 安装了maven:3-jdk-8 ,所以构建时间缩短到 5 分钟左右。

点击这个【流水线状态按钮】查看项目构建的进度和构建的日志。

image-20220420160248100

在流水线页面,点击【运行中】按钮,查看流水线的工作情况

image-20220420162809047

点击 构建的作业,可查看构建的日志。从图中可以看到 maven-build 已经成功运行完成。production 任务正在运行中。

image-20220420163101751

最后,在流水线页面,可看到项目部署成功。此次构建用时 8 分钟。

image-20220420170758651

查看部署结果

项目构建成功后,打开浏览器,访问 http://web,页面显示如下内容,表示项目部署成功

image-20220421164832019

至此,完成了代码仓库建立、Springboot 运行环境搭建、项目打包部署的这个过程。

你可以通过 Gitlab 的 WebIDE 修改代码,提交后项目会自动打包部署。

修改代码体验自动部署

编辑项目代码文件HelloController.java,修改 index方法返回的字符串

image-20220421164645192

我将字符串"Greetings from Spring Boot and GitLab!"改为 "Greetings from Spring Boot and GitLab!",提交修改后,gitlab 会自动开发打包并重新部署应用。

流水线运行完毕后,访问 web 服务器,可以看到首页内容已经变为"Greetings from Spring Boot and GitLab!"

image-20220421165420229

同样,在本地修改代码,push到 gitlab 代码仓库,也会触发 gitlab 流水线。

至此,我们已经完成了 SpringBoot 生产环境搭建、代码仓库安装、自动打包部署。

若你的项目是前端后分离的项目,可以参考【若依管理系统(前后端分离版)部署】

CSDN 开发云,致力于帮助开发者让开发、代码发布、部署更简单。

FAQ

作业运行错误 Could not resolve host

fatal: unable to access 'http://2c722bd81d95/root/gs-spring-boot.git/': Could not resolve host: 2c722bd81d95
ERROR: Job failed: exit code 1

image-20220421152451050

原因是未设置 gitlab 的 external_url 参数,可参考 修改GitLab的服务地址 进行设置

如何手动进行项目构建

点击左侧菜单【CI/CD】-> 【流水线】,进入流水线页面后,点击页面右侧的【运行流水线】按钮,进入运行流水线页面,点击【运行流水线】

image-20220420161200778

密钥配置错误

image-20220420160844264

出现上面错误,表示 CI/CD 变量 SSH_PRIVATE_KEY 设置错误。请参考文档重新设置私钥

git clone https://github.com/spring-guides/gs-spring-boot.git

cd gs-spring-boot/complete/

mvn clean package -Dmaven.test.skip=true

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多鱼的夏天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值