Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
slm-fileview
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
jenkins
slm-fileview
Commits
82285786
Commit
82285786
authored
Nov 26, 2021
by
yongshengLuo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add new file
parent
e37783f8
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
114 additions
and
0 deletions
+114
-0
.gitlab-ci.yml
.gitlab-ci.yml
+114
-0
No files found.
.gitlab-ci.yml
0 → 100644
View file @
82285786
#
# 注意: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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment