通知
通过gitlab的webhook功能,当有source push到gitlab上,自动触发回调,然后执行shell。
可以使用这个自作的webhook接受程序
https://hub.docker.com/r/ebusiness/webhook
shell
git
用git clone或者pull最新source。1
2
3
4
5
6
7
8PRIVATE_KEY=/id_rsa
WORK_ROOT=/java
APP_PATH=${WORK_ROOT}/app-api
if [[ ! -d ${APP_PATH} ]]; then
docker run --rm -v ${PRIVATE_KEY}:/root/id_rsa -v ${WORK_ROOT}:/git alpine/git clone --single-branch --branch development git@gitlab.com:app-api.git --config core.sshCommand="ssh -i/root/id_rsa -F /dev/null -oStrictHostKeyChecking=no"
else
docker run --rm -v ${PRIVATE_KEY}:/root/id_rsa -v ${WORK_ROOT}:/git alpine/git pull
fi
build
1 | docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v gradle-cache:/root/.gradle -v ${APP_PATH}:/work -w /work openjdk:11 sh -c ' |
手动分层
上面使用的是spring boot的plugin自带的bootBuildImage来构建的image,当然构建的时候是用到了spring boot的分层的,每次构建时会尽可能的变更最少的层。但是因为上面用到的构建image,以及运行image都是固定的,如果用户想使用自己的image的话,需要手动构建1
2
3
4
5
6
7
8
9
10
11
12FROM amazoncorretto:17-alpine as builder
WORKDIR application
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract
FROM amazoncorretto:17-alpine
WORKDIR application
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
先build程序,然后build镜像1
2./gradlew bootJar
docker build .
deploy
1 | LOG_PATH=/logs |
定期清理垃圾image
1 | docker rmi $(docker images -f "dangling=true" -q) |