Commit 82285786 authored by yongshengLuo's avatar yongshengLuo

Add new file

parent e37783f8
#
# 注意:1、arm64和amd64的镜像是有区别的,许多镜像默认是amd64内核,
# 所以一般情况下不需要为amd64内核担心,若需要arm64内核先去https://hub.docker.com/寻找镜像
# 2、改动完成可以去gitlab CI LINT验证文件格式
# 3、如果需要新增分支,直接在env目录下增加一个环境文件,配置所需参数,不要轻易改动此文件
#
# 因为Runner执行器设置为docker, 所以这里需要指定docker的版本,不指定也行,默认会用注册runner时指定的版本。若job存在image会覆盖
#image: docker:stable
#自定义全局变量
variables:
#指定maven仓库路径
MAVEN_OPTS: "-Dmaven.repo.local=/.m2"
#docker buildx 内核
CI_BUILD_ARCHS: "linux/arm64"
#maven镜像
CI_MAVEN_IMAGE: "swr.cn-south-1.myhuaweicloud.com/build-needs/arm64v8/maven:3.6-jdk-8-nexus"
#自己做的镜像,里面结合了jdk maven docker buildx
CI_BUILD_PUSH_IMAGE: "swr.cn-south-1.myhuaweicloud.com/build-needs/arm64v8/dockerbuildx:maven3.6-jdk8"
#集成了ssh
CI_DEPLOY_IMAGE: "linuxkit/sshd:666b4a1a323140aa1f332826164afba506abf597"
#执行阶段定义
stages:
# - maven test
- docker build and push
- deploy
#maven test:
# image: ${CI_MAVEN_IMAGE}
# stage: maven test
# script:
# #maven打包
# - mvn $MAVEN_OPTS clean test
# #标签指定runner
# tags:
# - slm-cloud-group
# #只允许哪些分支
# only:
# # web说明:手动创建一个流水线任务,逻辑结合了上面的MANUAL_ENV变量
# # 如果你要手动执行一个标签流水线任务,一定要新增MANUAL_ENV变量指定环境
# # ps:分支也可指定变量,分支默认会加载ci_env,所以可以不指定。但是ci_env下不存在的分支一定要指定
# - web
# #不允许失败
# allow_failure: false
docker build and push:
image: ${CI_BUILD_PUSH_IMAGE}
stage: docker build and push
before_script:
- source ./ci_env/.base.env
- >
if [ ! -n "${MANUAL_ENV}" ]; then
source ./ci_env/.${CI_COMMIT_REF_NAME}.env;
else source ./ci_env/.${MANUAL_ENV}.env;
fi
script:
#打包jar
#- mvn $MAVEN_OPTS clean install -Dmaven.test.skip=true -Dspring.profiles.active=${SPRING_ACTIVE_PROFILE}${VERSION}
- mvn $MAVEN_OPTS clean package -U -P$SPRING_ACTIVE_PROFILE -Dmaven.test.skip=true
#这个脚本的目的是清除上一个镜像
- sh ./ci_env/sh/build.sh $DOCKER_REPO${SPRING_ACTIVE_PROFILE}${VERSION}
#docker登录远程镜像仓库
- docker login -u $DOCKER_USER -p $DOCKER_PASSWORD swr.cn-south-1.myhuaweicloud.com
#- export DBTIME=$(date +%s)
- echo docker buildx build --build-arg APP_NAME="$APP_NAME" --build-arg JAVA_OPTS="$JAVA_OPTS" --platform $CI_BUILD_ARCHS -t $DOCKER_REPO${SPRING_ACTIVE_PROFILE}${VERSION} .
#改动此处必须了解build和buildx,buildx的作用是指定系统内核build镜像,但是注意DockerFile中的镜像必须和指定的内核匹配,不然会build失败
- docker buildx build --build-arg APP_NAME="$APP_NAME" --build-arg JAVA_OPTS="$JAVA_OPTS" --platform $CI_BUILD_ARCHS -t $DOCKER_REPO${SPRING_ACTIVE_PROFILE}${VERSION} .
#上传镜像,注意,若第一次上传会消耗较长时间,若是第二次上传因为docker images的原理,只会替换和上次镜像不同的卷(一般是上层的卷),
#push 的时候不是push一个文件,而是分成了多个卷从下层往上层依次push
- docker push $DOCKER_REPO${SPRING_ACTIVE_PROFILE}${VERSION}
#push完之后继续清除
- sh ./ci_env/sh/build.sh $DOCKER_REPO${SPRING_ACTIVE_PROFILE}${VERSION}
tags:
- slm-cloud-group
only:
- web
allow_failure: false
deploy:
image: ${CI_DEPLOY_IMAGE}
stage: deploy
before_script:
- source ./ci_env/.base.env
- >
if [ ! -n "${MANUAL_ENV}" ]; then
source ./ci_env/.${CI_COMMIT_REF_NAME}.env;
else source ./ci_env/.${MANUAL_ENV}.env;
fi
#初始化配置ssh-agent,由于镜像集成了,不会选择安装
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
#开启ssh-agent
- eval $(ssh-agent -s)
#若报错信息invalid format,代表ssh key配置有误,挖坑2小时
- ssh-add <(echo "${RUNNER_SSH_PRIVATE_KEY}")
- mkdir -p ~/.ssh
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
script:
#远程登录并执行命令,执行shell脚本
- >
if [[ ${VERSION} =~ 'v2' ]] && [[ ! -n "${ONLY_IMAGE}" ]];then
ssh root@${RUNNER_SERVER_IP} "kubectl -n ${SPRING_ACTIVE_PROFILE}${VERSION} patch deployment $APP_NAME -p '{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"`date +'%s'`\"}}}}}';";
elif [[ ! -n "${ONLY_IMAGE}" ]];then
ssh root@${RUNNER_SERVER_IP} "kubectl -n $SPRING_ACTIVE_PROFILE patch deployment $APP_NAME -p '{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"`date +'%s'`\"}}}}}';";
else
echo 只build镜像,不重新部署;
fi
#if [ ! -n "${ONLY_IMAGE}" ]; then
# ssh root@${RUNNER_SERVER_IP} "kubectl -n $SPRING_ACTIVE_PROFILE patch deployment $APP_NAME -p '{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"`date +'%s'`\"}}}}}';";
#else echo 只build镜像,不重新部署;
#fi
tags:
- slm-cloud-group
only:
- web
allow_failure: false
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment