Skip to content

scarecrowQoQ is testing out GitHub Actions 🚀 #58

scarecrowQoQ is testing out GitHub Actions 🚀

scarecrowQoQ is testing out GitHub Actions 🚀 #58

Workflow file for this run

name: Build and Deploy Web
run-name: ${{ github.actor }} is testing out GitHub Actions 🚀
on:
push:
branches:
- main
# pull_request:
# branches:
# - main
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
# 下载源码
- uses: actions/checkout@v3
# node.js
- name: 下载 Nodejs-18 📀
uses: actions/setup-node@v3
with:
node-version: "18"
# 缓存
- name: 查找依赖缓存 🔍
uses: actions/cache@v2
id: cache
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
# 下载依赖
- name: 如果没有缓存就 NPM 下载依赖 📥
if: steps.cache.outputs.cache-hit != 'true'
run: npm install
# build项目
- name: NPM 构建项目 🛠️
run: npm run build
# 登录docker
- name: 登录 Docker Hub 🛬
run: docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
# 创建docker镜像
- name: 创建 Docker 镜像 📷
run: sudo docker buildx build --platform=linux/amd64 --file ./Dockerfile . --tag ${{ secrets.DOCKER_USERNAME }}/lisianthus
# 上传docker镜像
- name: 上传 Docker 镜像 📸
run: docker push ${{ secrets.DOCKER_USERNAME }}/lisianthus
# 连接并部署
- name: SSH 连接并部署
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_ADDRESS }}
username: ubuntu
password: ${{ secrets.SERVER_PWD }}
script: |
# 配置镜像名称
img=${{ secrets.DOCKER_USERNAME }}/lisianthus
# 配置容器名称
container=lisianthus
sudo -i
if sudo docker ps -a --filter name=$container; then
echo "容器: $container 存在,删除容器."
sudo docker stop $container
sudo docker rm -f $container
else
echo "容器: $container 不存在"
fi
if sudo docker images --filter=reference=$img; then
echo "镜像: $img 镜像存在, 删除镜像重新构建."
sudo docker rmi -f $img
fi
sleep 3
# 拉取新镜像
sudo docker pull $img:latest
if sudo docker images --filter=reference=$img; then
echo "拉取 $img 新镜像成功."
else
echo "拉取 $img 新镜像失败."
exit 78
fi
echo "启动 $img 容器服务! 容器80端口映射到主机8080端口"
sudo docker run --name $container -d -p 8080:80 $img
# 检测服务是否启动成功
if sudo docker ps --filter name=$container; then
echo "$img 服务启动成功Pass"
else
echo "$img 服务启动失败Fail"
exit 78
fi