#(1)根据dockerfile构建基础镜像
1)dockerfile
#mkdir /temp/basic
#cd /temp/basic
#cat dockerfile
FROM java:8
MAINTAINER wangfang
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
2)构建
docker build registry.cn-hangzhou.aliyuncs.com/wangfang-k8s/java:v1 .
docker push registry.cn-hangzhou.aliyuncs.com/wangfang-k8s/java:v1
#(2)根据打包生成的jar包生成新的dockerfile文件
1)dockerfile
#mkdir /temp/release; cd /temp/release
#cat dockerfile
FROM registry.cn-hangzhou.aliyuncs.com/wangfang-k8s/java:v1
ADD demo-0.0.1-SNAPSHOT.jar /
WORKDIR /
EXPOSE 8080
ENTRYPOINT ["java","-jar","demo-0.0.1-SNAPSHOT.jar"]
#(3)准备项目的资源配置清单
1)deployment对象资源配置清单文件
#cd /temp/release
# cat springboot-test.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: springboot-test-deployment
spec:
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
replicas: 2
selector:
matchLabels:
app: springboot-test
template:
metadata:
labels:
app: springboot-test
spec:
containers:
- name: springboot-test
image: registry.cn-hangzhou.aliyuncs.com/wangfang-k8s/springboot-test:tag
ports:
- containerPort: 8080
resources:
requests:
memory: "256Mi"
cpu: "256m"
limits:
memory: "512Mi"
cpu: "512m"
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 20
periodSeconds: 3
successThreshold: 1
failureThreshold: 3
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 20
periodSeconds: 3
successThreshold: 1
failureThreshold: 3
2)service对象资源配置清单文件
# cat springboot-test-service.yaml
apiVersion: v1
kind: Service
metadata:
name: springboot-test-service
spec:
selector:
app: springboot-test
type: NodePort
ports:
- name: http
protocol: TCP
port: 8080
targetPort: 8080
nodePort: 33333
type: NodePort
#(3)配置jenkins
1)丢弃旧的构建
2)参数化构建过程
3)配置tag
4)配置git仓库地址
5)配置打包命令
6)ssh到jenkins服务器, 这台机器我配置的也是kubectl客户端;
命令说明:
把打包生成的jar包拷贝到工作目录, 根据tag构建新的镜像,
实验演示我是推送到阿里云的容器镜像仓库, 生产环境建议部署habor开源镜像仓库, 速度更快
然后根据tag把资源配置的tag里面替换成真实的tag;
最后根据资源配置清单文件发布项目
cd /temp/release
\cp /var/lib/jenkins/workspace/test/target/demo-0.0.1-SNAPSHOT.jar .
docker build -t registry.cn-hangzhou.aliyuncs.com/wangfang-k8s/springboot-test:${tag} .
docker login --username=your_name registry.cn-hangzhou.aliyuncs.com --password=your_password
docker push registry.cn-hangzhou.aliyuncs.com/wangfang-k8s/springboot-test:${tag}
sed -ri "s/tag/${tag}/g" springboot-test.yaml
kubectl apply -f .
注意: 第一次发布项目, 使用的是sed, 使用apply发布项目; 第一次之后把sed和apply方式修改成set image发布项目
kubectl set image deployment deployment_name container_name=image:version
#(4)测试
1)修改源代码如下, 同时提交到git仓库和打tag
2)开始构建项目
pod容器创建成功
发布的tag的版本
访问资源, 确实是修改后的资源
3)修改资源进行第二次发布
上传到git远程仓库
创建tag并上传到git仓库
4)修改jenkins为滚动发布, 不使用资源配置清单