【回望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
❌ [ 勘误 ] /* 暂无 */
📜 [ 声明 ] 由于作者水平有限,本文有错误和不准确之处在所难免,
本人也很想知道这些错误,恳望读者批评指正!
更多推荐
所有评论(0)