LisianthusLeaf is testing out GitHub Actions 🚀 #62
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |