使用Github Action 进行CI-CD
原文地址:https://www.x1uc.top/blog/github-action-use
使用Github Action 进行CI-CD
我的博客建立起来还没有多久,所以时不时的会加一些功能。但是每一次加完功能之后,部署的步骤总是非常非常的麻烦。
后端步骤:maven打包->jar包放到服务器上->停止java容器-> 删除java镜像-> 重新build镜像-> 启动容器
前端步骤 -> 打包 -> 放到服务器上 -> 删除旧包 -> 包改名 ->重启服务器
每一次想要加功能的时候想到这繁琐的步骤,直接劝退了。
我现在在实习的公司,开发环境更新的时候也可以说极度的麻烦。但是最近leader搭了一个Jenkins来简化更新。不得不说,是真的好用。所以我决定给我的博客开发也加上CI/CD
因为我博客的代码本来就是放在Gihub上进行托管,之前虽然没有使用过Github Action但是也听说过有这么个东西,服务器本身的内存也不大,也没必要折腾Jenkins
Github Action 是什么
Github Action 可以理解为 Github 免费提供的一个云服务器。
当你的仓库有变化的时候(例如:有新的提交),会触发服务器执行对应的脚本。
Github Action 如何使用
既然是一台云服务器,能干的事情当然就很多了。但是我认为最重要的就是:连接我们自己的服务器。
workflow大概是这样:commit代码 -> 触发github action -> github服务器 connect 我的服务器 -> 执行脚本(拉取最新代码-> 打包 -> 部署)
我们如何操作Github的这台服务器呢?靠的是.github/workflows/main.yml配置文件。
如何创建这个脚本呢?如图所示(当然也可以手动创建)
下面我们会分为两步讲:
- 如何使用Github提供的服务器连接自己的服务器
- 如何使用main.yml配置文件执行脚本
Github Action 如何连接 我的服务器
连接服务器使用的自然是ssh连接。分为四步
- 生成密钥(公钥&私钥)
- 将私钥内容粘贴,放到图片所示位置
- 将公钥放到
~/.ssh/authorized_keys
文件中,这个文件可以放置多个公钥 - 配置main.yml 文件。
配置main.yml文件
我贴一下自己的main.yml文件
如果你也是和我一样,只是想使用github的服务器连接上自己的服务器执行脚本。那你完全可以只需要关注 Deploy to server 的 run 部分的代码。
前端部分:
name: Deploy to Server
on:
push:
branches:
- main # 触发的分支
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up SSH key
uses: webfactory/ssh-agent@v0.9.0
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Deploy to server
run: |
ssh -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'EOF'
# 导航到项目目录
cd /home/ecs-user/repo/YueZi_Blog
# 拉取最新代码
git pull origin main
# 安装依赖
npm install # 或者适用于您的项目的命令
# 构建项目
npm run build # 或者适用于您的项目的命令
cd /home/ecs-user/repo
./update.sh
EOF
后端部分:
name: Deploy to Server
on:
push:
branches:
- main # 触发的分支
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up SSH key
uses: webfactory/ssh-agent@v0.9.0
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Deploy to server
run: |
ssh -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'EOF'
# 导航到项目目录
cd /home/ecs-user/repo/YueZi_Blog_BackEnd
# 配置 SDKMAN
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
# 拉取最新代码
git pull origin main
# 构建项目
mvn clean install -DskipTests
rm -rf ~/Blog_BackEnd/YueZi_Blog-0.0.1-SNAPSHOT.jar
mv target/YueZi_Blog-0.0.1-SNAPSHOT.jar ~/Blog_BackEnd/
cd ~/Blog_BackEnd
./update.sh
EOF