ujcms-v10.1.3/.cnb.yml

171 lines
4.7 KiB
YAML

.env_setting: &env_setting
name: version env setting
script: |
echo "CNB_BRANCH: ${CNB_BRANCH}"
VERSION="${CNB_BRANCH#v}"
MAJOR=$(echo "$VERSION" | cut -d'.' -f1)
MINOR=$(echo "$VERSION" | cut -d'.' -f2)
PATCH=$(echo "$VERSION" | cut -d'.' -f3)
echo "##[set-output version=$VERSION]"
echo "##[set-output major=$MAJOR]"
echo "##[set-output minor=$MINOR]"
echo "##[set-output patch=$PATCH]"
git fetch --quiet --tags
CURRENT_TAG=${CNB_BRANCH}
echo "CURRENT_TAG: ${CURRENT_TAG}"
LATEST_TAG=$(git tag | sort -V | tail -n 1)
echo "LATEST_TAG: ${LATEST_TAG}"
LATEST_MAJOR_TAG=$(git tag | grep "^v${MAJOR}\." | sort -V | tail -n 1)
echo "LATEST_MAJOR_TAG: ${LATEST_MAJOR_TAG}"
DOCKER_TARGET="${IMAGE_NAME}:${VERSION},${IMAGE_NAME}:${MAJOR}.${MINOR}"
if [ "$CURRENT_TAG" = "$LATEST_MAJOR_TAG" ]; then DOCKER_TARGET="${DOCKER_TARGET},${IMAGE_NAME}:${MAJOR}"; fi
if [ "$CURRENT_TAG" = "$LATEST_TAG" ]; then DOCKER_TARGET="${DOCKER_TARGET},${IMAGE_NAME}:latest"; fi
echo "##[set-output docker_target=$DOCKER_TARGET]"
exports:
version: VERSION
major: MAJOR
minor: MINOR
patch: PATCH
docker_target: DOCKER_TARGET
.env_testing: &env_testing
name: version env testing
script: |
echo "VERSION: ${VERSION}"
echo "MAJOR: ${MAJOR}"
echo "MINOR: ${MINOR}"
echo "PATCH: ${PATCH}"
echo "DOCKER_TARGET: ${DOCKER_TARGET}"
.build_docker: &build_docker
# 声明式的构建环境 https://docs.cnb.cool/
# 可以去dockerhub上 https://hub.docker.com/_/maven 找到您需要maven和jdk版本
image: maven:3.9-eclipse-temurin-17-noble
volumes:
# 声明式的构建缓存 https://docs.cnb.cool/zh/grammar/pipeline.html#volumes
- /root/.m2:copy-on-write
.build_jobs: &build_jobs
- <<: *env_setting
- <<: *env_testing
- name: mvn package
script: |
sed -i "s#CNB_REPO_SLUG#${CNB_REPO_SLUG}#g" ".cnb/maven-settings.xml"
cat ".cnb/maven-settings.xml"
mvn -B clean package -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -s .cnb/maven-settings.xml
- name: docker login
script: docker login -u ${CNB_TOKEN_USER_NAME} -p "${CNB_TOKEN}" ${CNB_DOCKER_REGISTRY}
- name: docker build
script: docker buildx build --progress=plain --push -t ${IMAGE_NAME}:${VERSION}-linux-${PLATFORM} .
- name: resolve
type: cnb:resolve
options:
key: build-${PLATFORM}
.await_amd64: &await_amd64
name: await the amd64
type: cnb:await
options:
key: build-amd64
.await_arm64: &await_arm64
name: await the arm64
type: cnb:await
options:
key: build-arm64
.docker_manifest: &docker_manifest
name: docker manifest
env:
VERSION_NAME: ${VERSION}
image: cnbcool/manifest
settings:
username: ${DOCKER_USER}
password: ${DOCKER_TOKEN}
target: ${DOCKER_TARGET}
template: ${IMAGE_NAME}:${VERSION}-OS-ARCH
platforms:
- linux/amd64
- linux/arm64
.docker_remove_tag: &docker_remove_tag
name: docker remove tag
type: artifact:remove-tag
options:
name: ${CNB_REPO_NAME}
tags:
- ${VERSION}-linux-amd64
- ${VERSION}-linux-arm64
type: docker
.trigger_deploy: &trigger_deploy
- name: trigger deploy CNB image to server
image: cnbcool/webhook
imports:
- https://cnb.cool/ujcms/secrets/-/blob/main/env.yml
settings:
urls:
- https://api.cnb.cool/ujcms/deploy/-/build/start
method: POST
content_type: application/json
headers:
- "Accept=application/json"
template: |
{
"event": "api_trigger_deploy_cnb"
}
token_type: "Bearer"
token_value: "$CNB_TRIGGER_TOKEN"
# 分支名
v*.*.*:
tag_push:
- name: docker build amd64
runner:
tags: cnb:arch:amd64
docker: *build_docker
services:
- docker
env:
IMAGE_NAME: ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}
PLATFORM: amd64
stages: *build_jobs
- name: docker build arm64
runner:
tags: cnb:arch:arm64:v8
docker: *build_docker
services:
- docker
env:
IMAGE_NAME: ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}
PLATFORM: arm64
stages: *build_jobs
- name: docker manifest and remove tag
services:
- docker
env:
IMAGE_NAME: ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}
stages:
- <<: *await_amd64
- <<: *await_arm64
- <<: *env_setting
- <<: *env_testing
- <<: *docker_manifest
- <<: *docker_remove_tag
- <<: *trigger_deploy
$:
vscode:
- docker:
build: .ide/Dockerfile
volumes:
- /root/.m2:copy-on-write
services:
- vscode
- docker