Files
open-gateway-service/.gitea/workflows/build.yml
T

68 lines
3.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: build
# open-gateway 开放接口网关 CI(仿 usermsg/service build.yml 平台链,不含部署)
# 触发:push 到 main
# 链路:clone 源码 -> maven 容器构建 jar(复用宿主 m2 缓存)-> cp 固定名 app.jar
# -> docker build -f docker/Dockerfile -> push Nexus docker-hosted
# Nexus 凭据从宿主 prod.env 读入 job env(同机内网 CI,安全边界等同,勿回显)
# 部署:projman 注册应用(open-gateway,空 ctx,端口 10010)后走发布链 Apply 拉起
on:
push:
branches: [ main ]
workflow_dispatch:
jobs:
build-push:
runs-on: ubuntu-latest
container:
image: docker:24
options: --network infra-infra-net
steps:
- name: 安装 git / curl(alpine)
run: apk add --no-cache git curl
- name: 拉取源码(内网无 GitHub,手动 clone 本仓库)
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git clone --depth 1 --branch main "http://x-access-token:${GITHUB_TOKEN}@gitea.yunhaixingtong.com/${{ github.repository }}.git" /tmp/src
cp -a /tmp/src/. .
rm -rf /tmp/src
- name: 读取 Nexus 凭据(同机 prod.env,不回显)
run: |
set -e
docker run --rm -v /opt/docker/projman-deploy:/pe:ro alpine sh -c \
'grep -E "^PROJMAN_NEXUS_USER=|^PROJMAN_NEXUS_PASSWORD=" /pe/prod.env' > /tmp/nx.env
# prod.env 无 NEXUS_USER 时默认 admin
grep -q '^PROJMAN_NEXUS_USER=' /tmp/nx.env || echo 'PROJMAN_NEXUS_USER=admin' >> /tmp/nx.env
echo "NX_USER=$(grep '^PROJMAN_NEXUS_USER=' /tmp/nx.env | head -1 | cut -d= -f2-)" >> "$GITHUB_ENV"
echo "NX_PASS=$(grep '^PROJMAN_NEXUS_PASSWORD=' /tmp/nx.env | head -1 | cut -d= -f2-)" >> "$GITHUB_ENV"
rm -f /tmp/nx.env
- name: 构建 jar(maven 容器,复用宿主 m2 缓存)
run: |
set -e
CTR="mavenbuild-open-gateway-$(date +%s)"
trap 'docker rm -f "$CTR" >/dev/null 2>&1 || true' EXIT
docker run -d --name "$CTR" \
--network infra-infra-net \
-v /opt/docker/projman-m2:/root/.m2 \
-w /build maven:3.6.3-jdk-8 sleep 3600
docker cp "${PWD}/." "$CTR":/build/
docker exec "$CTR" sh -c "printf '%s' '<settings><profiles><profile><id>nexus-repo</id><repositories><repository><id>nexus-internal</id><url>http://nexus:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository></repositories></profile></profiles><activeProfiles><activeProfile>nexus-repo</activeProfile></activeProfiles></settings>' > /root/.m2/settings.xml"
docker exec "$CTR" sh -c 'cd /build && mvn -B -DskipTests clean package'
docker exec "$CTR" sh -c 'cd /build/target && cp *.jar app.jar'
mkdir -p "${PWD}/target"
docker cp "$CTR":/build/target/app.jar "${PWD}/target/app.jar"
- name: 构建并推送镜像
run: |
set -e
TAG=$(echo "$GITHUB_SHA" | cut -c1-8)
echo "${NX_PASS}" | docker login nexus:8083 -u "${NX_USER}" --password-stdin
docker build -t "nexus:8083/docker-hosted/open-gateway-service:${TAG}" -f docker/Dockerfile .
docker push "nexus:8083/docker-hosted/open-gateway-service:${TAG}"
echo "open-gateway-service:${TAG} pushed"