Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
slm-bi
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
林锐标
slm-bi
Commits
306081c8
Commit
306081c8
authored
May 18, 2021
by
linruibiao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
接口编写
parent
2c8a60b4
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
127 additions
and
0 deletions
+127
-0
.gitlab-ci.yml
.gitlab-ci.yml
+102
-0
Dockerfile
Dockerfile
+25
-0
No files found.
.gitlab-ci.yml
0 → 100644
View file @
306081c8
#
# 注意: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-bi_java
#只允许哪些分支
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
-
mvn $MAVEN_OPTS clean package -U -P$SPRING_ACTIVE_PROFILE -Dmaven.test.skip=true
#这个脚本的目的是清除上一个镜像
-
sh ./ci_env/sh/build.sh $DOCKER_REPO${CI_COMMIT_REF_NAME}
#docker登录远程镜像仓库
-
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD swr.cn-south-1.myhuaweicloud.com
-
echo docker buildx build --build-arg APP_NAME="$APP_NAME" --build-arg JAVA_OPTS="$JAVA_OPTS$SPRING_ACTIVE_PROFILE" --platform $CI_BUILD_ARCHS -t $DOCKER_REPO$SPRING_ACTIVE_PROFILE .
#改动此处必须了解build和buildx,buildx的作用是指定系统内核build镜像,但是注意DockerFile中的镜像必须和指定的内核匹配,不然会build失败
-
docker buildx build --build-arg APP_NAME="$APP_NAME" --build-arg JAVA_OPTS="$JAVA_OPTS$SPRING_ACTIVE_PROFILE" --platform $CI_BUILD_ARCHS -t $DOCKER_REPO$SPRING_ACTIVE_PROFILE .
#上传镜像,注意,若第一次上传会消耗较长时间,若是第二次上传因为docker images的原理,只会替换和上次镜像不同的卷(一般是上层的卷),
#push 的时候不是push一个文件,而是分成了多个卷从下层往上层依次push
-
docker push $DOCKER_REPO$SPRING_ACTIVE_PROFILE
#push完之后继续清除
-
sh ./ci_env/sh/build.sh $DOCKER_REPO$SPRING_ACTIVE_PROFILE
tags
:
-
slm-bi_java
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 "$SERVER_SSH_KEY")
-
mkdir -p ~/.ssh
-
echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
script
:
#远程登录并执行命令,执行shell脚本,因为stop和rm的时候如果容器不存在是会报错的,在任意命令发生报错都会造成部署失败,可优化日志
-
echo 远程指令 root@$SERVER_IP "sh /opt/docker-command/rm-app.sh $APP_NAME $DOCKER_REPO$SPRING_ACTIVE_PROFILE >>/opt/docker-command/rm-app.log; $SSH_COMMAND $HOSTS $DOCKER_REPO$SPRING_ACTIVE_PROFILE;"
-
ssh root@$SERVER_IP "sh /opt/docker-command/rm-app.sh $APP_NAME $DOCKER_REPO$SPRING_ACTIVE_PROFILE >>/opt/docker-command/rm-app.log; $SSH_COMMAND $HOSTS $DOCKER_REPO$SPRING_ACTIVE_PROFILE;"
tags
:
-
slm-bi_java
only
:
-
web
allow_failure
:
false
\ No newline at end of file
Dockerfile
0 → 100644
View file @
306081c8
#镜像支持wkhtmltopdf0.12.6 ffmpeg4.2.4 jdk8
FROM
swr.cn-south-1.myhuaweicloud.com/build-needs/arm64v8/wkhtmltopdf-ffmpeg-jdk8:latest
#挂载目录,这个目录会挂载到宿主机,路径是docker指定的,可以使用inspect查看
VOLUME
/tmp
#复制,注意如果目标指定是目录,会自动解压,不想解压可以用COPY
ADD
target/*.jar app.jar
#对外暴露接口参考,并非指定
EXPOSE
2022
#ARG用于builld --build-arg 赋值,多个ARG对应多个--build-arg
ARG
APP_NAME
ARG
JAVA_OPTS
#ENV用于容器,目前在镜像中已经指定,容器启动无需设置,但是可以修改
#总结:ARG只存在于镜像,但是ENV会在镜像和容器中都存在
ENV
APP_NAME $APP_NAME
ENV
JAVA_OPTS $JAVA_OPTS
#语言环境,解决相互调用出现中文乱码
ENV
LANG C.UTF-8
#RUN可以使用ARG和ENV,RUN命令是在镜像构建的时候运行
RUN
mkdir
-p
/opt/java-tmp/
$APP_NAME
/
&&
\
ln
-sf
/usr/share/zoneinfo/Asia/Shanghai /etc/localtime
&&
\
echo
'Asia/Shanghai'
>
/etc/timezone
#注意因为要传递参数,ENTRYPOINT要选择shell模式,而非exec模式
#ENTRYPOINT和CMD因为其是在容器启动的时候执行,所以无法加载ARG,但是可以拿到ENV,所以ARG和ENV一般都是配合使用
ENTRYPOINT
java -server $JAVA_OPTS -jar /app.jar
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