【回望2023,走向2024】谁不曾梦想CI/CD自己的人生!

在这里插入图片描述
🚩时间飞逝,转眼间2024已经悄然而至。2023年,博主一直在备战考研,于是博文更新鸽了一年,贯穿于这一年的核心词,莫过于“唐静”老师的一句话:选择了就不会害怕,努力了就不会后悔!

年度流水账

1.5 记录项目提问问题
1.12 简历总结
1.22 春节过年留念
1.26 人工智能自学系列-完结
2.4 烟火
3.6 无眠

《无眠》
月色暗淡
不止星辰
日落惆怅
不止山河

推窗望月
只影孤墙
暮云遮日
心无所踪

3.20 ChatGpt文章创造财富
4.1 济南一游
4.16 完结软著申请
4.17 余晖

《余晖》
三分景,
几分闲适情;
满是和风,
又只剩,
温柔黄昏!

5.1 帅气的免冠照
5.17 ***
6.5 ***来喽
6.15 ***再出发
6.16 离校毕业照
6.25 ***稿
7.2 长治音乐节
7.22 Rua 猫猫
7.24 抢票系统开发思路总结
8.5 体验四川火锅
9.1 八月度总结:
9.24 年轻,要做最勇敢的事
9.25 五月天,好好好想见到你
10.13 大学最后的留念
11.10 ****
12.19 自研速记法
12.28 考研结束 == 学习开始!
12.30 跑步是人生的态度

年度鸡汤:

在这里插入图片描述
也许,没有骑快马奔一段路,是件遗憾的事。许多年后,有些东西终于从背后渐渐地追上我。那都是些要命的东西,我年轻时不把它们当回事,也不为自己着急。有一天一回头,发现它们已近在咫尺,这时我才明白了以往年月中那些不停奔跑的马,以及骑马奔跑的人。
马并不是被人的鞭子催着在跑,不是。马在自己奔逃,马一生下来便开始了奔逃,人只是在借助马的速度而已。
人和马奔逃的方向是否真的一致呢?
反正,我没骑马奔跑过,我保持着自己的速度。一些年,人们一窝蜂地朝某个地方飞奔,我被远远地落在后面,像是被遗弃。另一些年,人们回过头,朝相反的方向奔跑,我仍旧慢慢悠悠,远远地走在他们前头。我就是这样一个人,我不骑马。
– 《逃跑的马》(刘亮程)

🚩新的一年,新的 Flag:“雄关漫道真如铁,而今迈步从头越。” 祝大家龙年快乐,2024让我们再度起航!

😊你好,我是小航,一个正在变秃、变强的文艺倾年。
🔔祝福Or文章说明
🔔本文讲解基于GitHub自动化部署项目,一起卷起来叭!

一、介绍

在这里插入图片描述

由于使用GitLab CICD实现项目的自动化部署个人项目成本较大,Gitee部署是收费的,所以我们使用Github自动化部署功能:GitHub Actions

在这里插入图片描述
🔗官方文档:链接

GitHub Actions是GitHub提供的一个持续集成和持续部署的工具,可以通过一系列的自动化流程来构建、测试和部署软件。相同类型的产品还有Jenkins、GitLab CI/CD等。

优势:

之前:
本地打包成Jar包 —> ftp工具上传到服务器 —> 查看原先的Java进程并停掉(比如jps命令、ps -ef | grep … 很多命令可以查看Java进程) ----> nohup java -jar xxx.jar --spring.profiles.active=prod > nohup.out &
现在:
定义触发事件(比如push到main分支) — 自动构建Jar包 — 自定运行test(可有可无) — 自动部署到自己服务器的指定位置
相比就是太方便了!!!能省去太多时间了

CI/CD

  • CI(Continuous Integration)持续集成,CD(Continuous Deployment)持续部署。
  • CI:指将代码频繁地合并到共享存储库中,并进行自动化构建和测试,以便能够及早发现和解决潜在问题。
  • CD:是指将代码自动化部署到测试或生产环境中

语法

  • workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
  • name: 工作流的名称。
  • on: 指定次工作流的触发器。push 表示只要有人将更改推送到仓库就会触发工作流运行。(点击这里了解如何指定特定分支,路径或标签)
  • jobs: 将工作流运行的所有作业组合到一起。
  • build-and-deploy: 定义的作业的名称。
  • runs-on: 将作业配置为在最新版本的 Ubuntu Linux 上运行。这意味着作业将在 GitHub 托管的新虚拟机上执行。有关使用其他运行器的语法示例,请参阅 GitHub 操作的工作流语法。
  • steps: 将作业中运行的所有步骤组合在一起。嵌套在此部分下的每个项都是一个单独的操作或 shell 脚本。
  • uses: 指定需要运行的 action。
  • env: 指定运行 action 时需要用到的环境变量的值。

一般流水线包含的几个操作要点如下:workflow->job->step->action

二、实战

准备工作

在项目中指定一个workflow文件,然后在workflow文件中定义任务去指定具体的执行步骤,然后代码提交时,GitHub就会开一个虚拟机去执行workflow,从而达到自动化部署的功能。既然是在虚拟机中运行任务实现方式主要有两种:
在这里插入图片描述
0)密钥准备
在这里插入图片描述
这里我们将一些敏感的信息定义到Secret中,如服务器的ip和密码。若仓库是public,这些敏感信息写在workflow文件中会是不安全的。

REMOTE_IP
REMOTE_PWD

在这里插入图片描述
1)定义workflow文件

这里官方提供了一些,要是你觉得不适用的话,也可以点击set up aworkflow yourself去自己创建workflow文件。
在这里插入图片描述

部署SpringBoot项目

main.yml

# workflow 的名称
name: Deploy co-school

# 定义触发事件,push 推送到 main 分支或 pull request
on:
  # master分支触发
  push:
    branches: [ master ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  develop_build:
   # 定义运行的环境
    runs-on: ubuntu-latest
    steps: # 定义步骤
      - name: Pull code # 定义一个步骤名称,将最新提交的代码拉到运行任务的虚拟机中
        uses: actions/checkout@v3

      # https://github.com/marketplace/actions/setup-java-jdk
      - name: Set jdk # 设置JDK
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin' # 指定使用 temurin jdk
          java-version: '8' # 指定 Java 版本
          cache: 'maven' # 缓存 Maven 依赖项

      - name: Package # 项目打包
        run: mvn -B package -Dmaven.test.skip=true

      - name: Remove Jar # 移除JAR包
        run: sshpass -p ${{secrets.REMOTE_PWD}} ssh -o StrictHostKeyChecking=no root@${{secrets.REMOTE_IP}} "cd /data/co-school/back_end/GitHub_Action && rm -rf ./*"

      - name: Upload # 上传jar包和启动脚本到服务器中
        run: sshpass -p ${{secrets.REMOTE_PWD}} scp -r -o StrictHostKeyChecking=no ./target/co-school-v12.jar ./run.sh root@${{secrets.REMOTE_IP}}:/data/co-school/back_end/GitHub_Action

      - name: Deploy # 部署项目
        run: sshpass -p ${{secrets.REMOTE_PWD}} ssh -o StrictHostKeyChecking=no root@${{secrets.REMOTE_IP}} "cd /data/co-school/back_end/GitHub_Action && chmod +x run.sh && ./run.sh"

其中,run.sh是shell脚本:

#! /bin/bash
# 切换到jar包目录下
cd /data/co-school/back_end/GitHub_Action

AppName=co-school-v12.jar

PID=$(ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}')
if [ x"$PID" != x"" ]; then
    echo "$AppName is running..."
	  kill -9 $PID
	  echo "$AppName exited."
fi

nohup java -jar $AppName --spring.profiles.active=prod >> /data/co-school/back_end/logs/$AppName-$(date +%Y-%m-%d).log 2>&1 &
echo "$AppName is running..."

在这里插入图片描述
在这里插入图片描述
我们可以看到控制台具体的输出:
在这里插入图片描述
这样就是部署成功了
在这里插入图片描述

部署Vue项目

mian.yml

# workflow 的名称
name: Deploy co-school-app

# 定义触发事件,push 推送到 main 分支或 pull request
on:
  # master分支触发
  push:
    branches: [ master ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  develop_build:
    # 定义运行的环境
    runs-on: ubuntu-latest
    steps: # 定义步骤
      - name: Pull code # 定义一个步骤名称,将最新提交的代码拉到运行任务的虚拟机中
        uses: actions/checkout@v3

      # 环境
      - name: use Node.js
        # 使用action库  actions/setup-node安装node
        uses: actions/setup-node@v1
        with:
          node-version: 16.x

      # 配置国内源
      - name: config
        run: yarn config set registry https://registry.npmmirror.com/

      # 安装依赖
      - name: dependency
        run: yarn

      # 打包
      - name: build
        run: yarn run build

      - name: Remove Dist # 移除Dist文件
        run: sshpass -p ${{secrets.REMOTE_PWD}} ssh -o StrictHostKeyChecking=no root@${{secrets.REMOTE_IP}} "cd /data/co-school/nginx/html && rm -rf ./*"

      - name: Upload # 上传Dist到服务器中
        run: sshpass -p ${{secrets.REMOTE_PWD}} scp -r -o StrictHostKeyChecking=no ./dist/* root@${{secrets.REMOTE_IP}}:/data/co-school/nginx/html/

在这里插入图片描述

📌 [ 笔者 ]   文艺倾年
📃 [ 更新 ]   2024.2.7[ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

在这里插入图片描述

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值