说实话代码部署麻烦一次就够了,不应该次次重复一遍。从而 DevOps 派上用场了。本次选用的是 Github Actions 流水线。不用 Gitee Go 不为别的,单纯的不会使。
编辑 Dockerfile 文件,给 Spring Boot 应用创建 Docker 镜像做准备
dockerfile# 使用官方的 OpenJDK 作为基础镜像 FROM anapsix/alpine-java:8_server-jre_unlimited # 设置工作目录 # WORKDIR /app # 将本地 jar 包复制到镜像中 COPY ./*.jar app.jar # 暴露应用的端口 EXPOSE 8800 # 启动应用 ENTRYPOINT ["java","-Xms256m","-Xmx256m","-jar","/app.jar"]
配置服务器登录信息以及阿里云容器镜像服务登录信息
进入代码仓库后点击 Settings,在展开的菜单中选择 Secrets and variables 点击后选择创建 6 个 secrets 分别如下:
Secrets | 含义 |
---|---|
DOCKER_LOGIN_URL | 阿里云 Docker 镜像私有仓库地址 |
DOCKER_PASSWORD | 阿里云 Docker 镜像私有仓库登录密码 |
DOCKER_USERNAME | 阿里云 Docker 镜像私有仓库登录用户名 |
SERVER_IP | 服务器 IP |
SERVER_USER_NAME | 服务器登录用户名 |
SSH_PASSWORD | 服务器登录密码 |
创建 Github Actions 流水线
yamlname: Docker-Image-CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out the code
uses: actions/checkout@v2
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Set up JDK 8
uses: actions/setup-java@v4
with:
java-version: '8'
distribution: 'temurin'
cache: 'maven'
- name: Build with Maven
run: mvn clean package -Dmaven.test.skip=true
- name: Move JAR to .github/workflows
run: |
mkdir -p .github/workflows
mv ./target/*.jar .github/workflows/
- name: Log in to Aliyun Docker Registry
env:
ALIYUN_DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
ALIYUN_DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
ALIYUN_DOCKER_URL: ${{ secrets.DOCKER_LOGIN_URL }}
run: |
echo "${ALIYUN_DOCKER_PASSWORD}" | docker login "${ALIYUN_DOCKER_URL}" --username "${ALIYUN_DOCKER_USERNAME}" --password-stdin
- name: Remove old Docker images
run: |
docker images --format '{{.Repository}}:{{.Tag}}' | grep 'registry.cn-hangzhou.aliyuncs.com/nongscblog' | xargs -I {} docker rmi -f {}
- name: Build Docker image
run: docker build -f ./Dockerfile -t nblog-server .github/workflows/
- name: Tag Docker image
run: docker tag nblog-server registry.cn-hangzhou.aliyuncs.com/nongscblog/nblog-server:latest
- name: Push Docker image to Aliyun registry
run: docker push registry.cn-hangzhou.aliyuncs.com/nongscblog/nblog-server:latest
- name: Set up SSH using username and password
env:
SSH_PASSWORD: ${{ secrets.SSH_PASSWORD }}
SSH_USER: ${{ secrets.SERVER_USER_NAME }}
SERVER_IP: ${{ secrets.SERVER_IP }}
run: |
sudo apt-get update
sudo apt-get install -y sshpass
sshpass -p "${SSH_PASSWORD}" ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SERVER_IP} << 'EOF'
# Login Aliyun Docker Repo
# echo "${ALIYUN_DOCKER_PASSWORD}" | docker login "${ALIYUN_DOCKER_URL}" --username "${ALIYUN_DOCKER_USERNAME}" --password-stdin
sudo docker login --username=${{ secrets.DOCKER_USERNAME }} --password=${{ secrets.DOCKER_PASSWORD }} ${{ secrets.DOCKER_LOGIN_URL }}
# Stop and remove old container
sudo docker ps -q -f "name=nblog-server" | xargs -r sudo docker stop
sudo docker ps -aq -f "name=nblog-server" | xargs -r sudo docker rm
# Remove old Docker images
sudo docker image prune -a -f
# Remove the specific Docker image
sudo docker rmi -f registry.cn-hangzhou.aliyuncs.com/nongscblog/nblog-server:latest
# Pull the new Docker image
sudo docker pull registry.cn-hangzhou.aliyuncs.com/nongscblog/nblog-server:latest
# create blog folders
sudo mkdir nblog
# Run the new container
sudo docker run -itd --ulimit nofile=1024 --name nblog-server -p 8800:8800 -v $(pwd)/nblog/logs:/blog-api/log/blog-dev registry.cn-hangzhou.aliyuncs.com/nongscblog/nblog-server:latest
EOF
工作流文件编写好之后会直接触发 Actions 进行触发构建工作,等待完成直接部署至目标服务器
查看服务器应用部署情况
这个部署全靠通义千问,这真是个好东西,兄弟们。正确输出你的需求,直接帮你完事,太棒了
首先这个没有使用 docker 镜像,使用使用 docker 镜像比较麻烦,要涉及容器之间通信问题,我不想解决这个问题,我直接选择逃避这个问题,选择曲线救国。
配置服务器登录信息以及阿里云容器镜像服务登录信息
Secrets | 含义 |
---|---|
DEPLOY_FLODER | 构建后文件存放位置 |
SERVER_IP | 服务器 IP |
SERVER_USER_NAME | 服务器登录用户名 |
SSH_PASSWORD | 服务器登录密码 |
创建 Github Actions 流水线
yamlname: BuildandDeployBlogView
on:
push:
branches:
- master # 监听main分支的push事件
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '16' # 或者你使用的node版本
- name: Install dependencies and build
run: |
npm install
npm run build
- name: Deploy to server via SSH
uses: appleboy/scp-action@v0.1.0
env:
HOST: ${{ secrets.SERVER_IP }}
USERNAME: ${{ secrets.SERVER_USER_NAME }}
PORT: 22
PASSWORD: ${{ secrets.SSH_PASSWORD }} # 或者使用KEY选项代替PASSWORD
with:
source: "dist/*"
target: ${{ secrets.DEPLOY_FLODER }} # 替换为你的web根目录路径
工作流文件编写好之后会直接触发 Actions 进行触发构建工作,等待完成直接部署至目标服务器
查看 dist 文件部署情况
与博客首页部署一致,其中需要注意的是 DEPLOY_FLODER 部署文件地址记得区分
使用通义千问来实现自己的博客首页以及博客内容管理部署
本文作者:Nongsc
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!