思路:
1.编写 .gitlab-ci.yml 文件
2.通过 yml 文件调用 sh 脚本
sh:
1.打包 clone 的项目
2.创建 Dockerfile 文件生成镜像
3.上传镜像到 docker 以便拉取镜像
4.创建 k8s 配置文件
5.删除 k8s 服务,然后启动
.gitlab-ci.yml :
stages:
- build
build-contain:
stage: build
script:
- sh test.sh
tags:
- test2
test.sh:
#!/bin/sh
#项目打包
mvn -Dmaven.test.skip=true package
#进入target文件夹
cd ./target
#创建Dockerfile文件
cat << EOF > Dockerfile
FROM registry.cn-hangzhou.aliyuncs.com/java-jdk/openjdk:jdk8
MAINTAINER LINJINP
VOLUME /tmp
LABEL app="test1" version="v1" by="linjinp"
COPY boot.jar boot.jar
EXPOSE 8088
CMD java -jar boot.jar
EOF
#创建镜像
docker build -t 10.10.111.117:31409/springboot .
#上传镜像
docker push 10.10.111.117:31409/springboot
#创建K8S配置文件
filename="test-1.yaml"
cat << EOF > $filename
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: test-1-depolyment
name: test-1-depoyment
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: test-1-depolyment
template:
metadata:
labels:
app: test-1-depolyment
spec:
containers:
- name: test-1-depolyment
image: 10.10.111.117:31409/springboot
ports:
- containerPort: 8080 #运行端口
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: test-1-depoyment
name: test-1-depoyment
namespace: default
spec:
type: NodePort
ports:
- port: 8089 #内部开放端口
targetPort: 8888 #项目端口
nodePort: 32000 #外部开放端口
selector:
app: test-1-depoyment
EOF
#先删除服务,再启动
kubectl delete -f $filename
kubectl create -f $filename
结果: