49 lines
2.1 KiB
YAML
49 lines
2.1 KiB
YAML
name: deploy-userbase-service
|
||
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
workflow_dispatch:
|
||
|
||
jobs:
|
||
build-deploy:
|
||
runs-on: ubuntu-latest
|
||
# docker:24 自带 docker CLI;宿主 docker.sock 默认挂入 job 容器,
|
||
# 因此 docker build/run 实际都在宿主守护进程上执行。
|
||
container:
|
||
image: docker:24
|
||
steps:
|
||
- name: Install git (alpine)
|
||
run: apk add --no-cache git
|
||
|
||
- name: Checkout (manual, internal Gitea)
|
||
run: |
|
||
git clone --depth 1 --branch main http://192.168.10.160:3000/${GITHUB_REPOSITORY}.git /tmp/src
|
||
cp -a /tmp/src/. .
|
||
rm -rf .git .gitea
|
||
rm -rf /tmp/src
|
||
|
||
# 用宿主 docker 守护进程跑 maven 3.9(--network=host 走宿主网络拉 nexus 依赖)。
|
||
# 重要:job 容器内 $PWD 不是宿主可见路径,不能直接 `-v $PWD:/build` 挂给 maven 容器
|
||
# (docker.sock 跨边界 bind mount 会落到宿主空目录,maven 看不到 pom.xml)。
|
||
# 改用 docker create + docker cp 把源码送进 maven 容器,构建完再把 target 拷回工作区。
|
||
- name: Build jar (maven 3.9, nexus maven-public)
|
||
run: |
|
||
MVN=$(docker create --network=host -v /opt/docker/ubs-m2:/root/.m2 -w /build maven:3.9-eclipse-temurin-8 mvn -s maven-settings.xml -B -DskipTests package)
|
||
docker cp "$PWD/." "$MVN:/build"
|
||
docker start -a "$MVN"
|
||
docker cp "$MVN:/build/target" "$PWD/target"
|
||
docker rm -f "$MVN"
|
||
|
||
- name: Build image on host daemon
|
||
run: docker build -f docker/Dockerfile -t userbase-service:latest .
|
||
|
||
- name: Deploy on host (infra-infra-net)
|
||
# 镜像已在宿主本地,直接运行,无需推送到 nexus(nexus docker 仓库为 HTTP,需 daemon insecure-registries 才能推送)
|
||
run: |
|
||
docker rm -f userbase-service 2>/dev/null || true
|
||
docker run -d --name userbase-service --network infra-infra-net -p 8060:8060 --restart unless-stopped userbase-service:latest
|
||
|
||
- name: Done
|
||
run: 'echo "UserBaseService deployed -> http://192.168.10.160:8060/userbase"'
|