工作流

This commit is contained in:
litianxiang
2026-05-07 09:39:26 +08:00
parent 9e5ba17dc4
commit 0a1dc1c10d

View File

@@ -4,7 +4,8 @@ on:
jobs: jobs:
build_and_deploy: build_and_deploy:
runs-on: ubuntu-latest runs-on: java21
outputs: outputs:
build_status: ${{ job.status }} build_status: ${{ job.status }}
build_url: ${{ gitea.server_url }}/${{ gitea.repository.owner.name }}/${{ gitea.repository.name }}/actions/runs/${{ gitea.run_id }} build_url: ${{ gitea.server_url }}/${{ gitea.repository.owner.name }}/${{ gitea.repository.name }}/actions/runs/${{ gitea.run_id }}
@@ -26,52 +27,20 @@ jobs:
with: with:
ref: master ref: master
- name: 2.Set up JDK 21
uses: actions/setup-java@v5 - name: 3.缓存 Maven 依赖
uses: actions/cache@v5
with: with:
java-version: '21' path: ~/.m2/repository
distribution: 'temurin' key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: 3.设置JAVA Maven 环境 - name: 4.构建项目
run: | run: |
# 适配root/普通用户 java -version
SUDO="" mvn -v
[ "$(id -u)" != "0" ] && SUDO="sudo" mvn clean package -DskipTests
# 安装依赖
$SUDO apt update && $SUDO apt install -y wget tar --no-install-recommends
# 下载Maven
MAVEN_VERSION="3.9.11"
MAVEN_TAR="apache-maven-${MAVEN_VERSION}-bin.tar.gz"
MAVEN_URL="https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/${MAVEN_TAR}"
wget --no-verbose -O /tmp/${MAVEN_TAR} ${MAVEN_URL}
# 解压+软链接
$SUDO tar -xzf /tmp/${MAVEN_TAR} -C /usr/local/
$SUDO ln -sf /usr/local/apache-maven-${MAVEN_VERSION} /usr/local/maven
# 配置PATH
echo "/usr/local/maven/bin" >> $GITHUB_PATH
export PATH="/usr/local/maven/bin:$PATH"
# 验证
mvn -v
- name: 4.构建jar包
run: |
echo "===== 开始构建JAR包 ====="
# 新增:打印当前构建分支(两种方式双重确认)
echo "当前工作目录分支:$(git branch --show-current)"
echo "Gitea检出分支:${{ github.ref_name }}"
echo "预期构建分支: master"
echo "========================"
mvn -B clean install -DskipTests -Pdev 2>&1
# 检查构建是否成功
if [ $? -ne 0 ]; then
echo "JAR包构建失败!"
exit 1
fi
- name: 5.生成Dockerfile - name: 5.生成Dockerfile
run: | run: |
@@ -81,7 +50,7 @@ jobs:
VOLUME /tmp VOLUME /tmp
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' > /etc/timezone RUN echo 'Asia/Shanghai' > /etc/timezone
ADD ./aida-seller-1.0.0.jar /app.jar ADD ./*.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"] ENTRYPOINT ["java","-jar","/app.jar"]
EOF EOF
echo "Dockerfile内容:" echo "Dockerfile内容:"
@@ -103,49 +72,40 @@ jobs:
- ./uploads:/temp/uploads - ./uploads:/temp/uploads
ports: ports:
- '10093:10093' - '10093:10093'
networks:
- aida_java_net
restart: always restart: always
networks:
aida_java_net:
external: true
name: aida_java_net
EOF EOF
# 验证docker-compose.yml生成 # 验证docker-compose.yml生成
echo "docker-compose.yml内容:" echo "docker-compose.yml内容:"
cat docker-compose.yml cat docker-compose.yml
- name: 7.安装SSH工具 - name: 7.上传jar到远程服务器
run: | uses: appleboy/scp-action@master
$SUDO apt install -y sshpass openssh-client --no-install-recommends with:
# 配置SSH免密 host: ${{ secrets.SERVER_HOST }}
mkdir -p ~/.ssh port: 22
echo "${{ secrets.SSH_KEY }}" > ~/.ssh/id_rsa username: ${{ secrets.SERVER_USER }}
chmod 600 ~/.ssh/id_rsa key: ${{ secrets.SSH_KEY }}
ssh-keyscan -H ${{ secrets.SERVER_HOST }} >> ~/.ssh/known_hosts source: "target/*.jar,Dockerfile,docker-compose.yml"
target: ${{ env.REMOTE_DEPLOY_PATH }}
preserve_host_directory_structure: false
- name: 8.同步文件到远程服务 - name: 8. 重启 Docker 服务
run: | uses: appleboy/ssh-action@master # 👈 专门执行命令的 action
echo "===== 同步文件到远程服务器 =====" with:
# 使用scp同步文件 host: ${{ secrets.SERVER_HOST }}
scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ username: ${{ secrets.SERVER_USER }}
./target/*.jar ./Dockerfile ./docker-compose.yml \ key: ${{ secrets.SSH_KEY }}
${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }}:${{ env.REMOTE_DEPLOY_PATH }} 2>&1 key_base64: true
script: |
- name: 9.部署和运行服务 echo "========= 进入部署目录 ========="
run: |
echo "===== 开始部署服务 ====="
# SSH执行部署命令
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} << 'EOF_SSH'
cd ${{ env.REMOTE_DEPLOY_PATH }} cd ${{ env.REMOTE_DEPLOY_PATH }}
echo "停止旧容器..." ls -l
docker compose down || true
echo "构建镜像..." echo "========= 停止旧服务 ========="
docker compose build --no-cache docker compose down
echo "启动服务..."
docker compose up -d echo "========= 启动新服务 ========="
echo "验证容器状态..." docker compose up -d --build
docker compose ps
echo "部署完成!" echo "========= 查看运行状态 ========="
EOF_SSH docker compose ps