k8s之根據tag發佈spring boot項目

#(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)丟棄舊的構建
k8s之根據tag發佈spring boot項目

2)參數化構建過程
k8s之根據tag發佈spring boot項目

3)配置tag
k8s之根據tag發佈spring boot項目

4)配置git倉庫地址

k8s之根據tag發佈spring boot項目

5)配置打包命令
k8s之根據tag發佈spring boot項目

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 .

k8s之根據tag發佈spring boot項目

注意: 第一次發佈項目, 使用的是sed替換和apply發佈項目; 第一次之後把sed和apply方式修改成set image發佈項目
kubectl set image deployment deployment_name container_name=image:version
k8s之根據tag發佈spring boot項目

#(4)測試
1)修改源代碼如下, 同時提交到git倉庫和打tag
k8s之根據tag發佈spring boot項目

k8s之根據tag發佈spring boot項目

k8s之根據tag發佈spring boot項目

2)開始構建項目
k8s之根據tag發佈spring boot項目

pod容器創建成功
k8s之根據tag發佈spring boot項目

發佈的tag的版本
k8s之根據tag發佈spring boot項目

訪問資源, 確實是修改後的資源
k8s之根據tag發佈spring boot項目

3)修改資源進行第二次發佈

k8s之根據tag發佈spring boot項目

上傳到git遠程倉庫
k8s之根據tag發佈spring boot項目

創建tag並上傳到git倉庫
k8s之根據tag發佈spring boot項目

4)修改jenkins爲滾動發佈, 不使用資源配置清單

k8s之根據tag發佈spring boot項目

k8s之根據tag發佈spring boot項目

k8s之根據tag發佈spring boot項目

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章