偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一鍵部署 SpringCloud 微服務(wù),yyds!

開發(fā) 前端
因?yàn)閖enkins需要pull git上的代碼,正常來說,代碼都是私有的,git clone操作的時(shí)候會(huì)需要密碼,就不能完成自動(dòng)化操作了。這里使用SSH-KEY 的方式,讓git clone操作無需密碼就能完成克隆。

一鍵部署Spring Cloud微服務(wù),需要用到 Jenkins K8S Docker等工具,自行安裝即可。

本文使用Jenkins部署,流程如下圖:

圖片圖片

  • 開發(fā)者將代碼push到git
  • 運(yùn)維人員通過jenkins部署,自動(dòng)到git上pull代碼
  • 通過maven構(gòu)建代碼
  • 將maven構(gòu)建后的jar打包成docker鏡像 并 push docker鏡像到docker registry
  • 通過k8s發(fā)起 發(fā)布/更新 服務(wù) 操作

其中 2~5步驟都會(huì)在jenkins中進(jìn)行操作。

1、開發(fā)者將代碼PUSH到Git

這一步本文不做詳細(xì)描述。

2、通過Jenkins部署,自動(dòng)到Git上PULL代碼

這里需要用到Jenkins 的 pipeline插件。

2.1、 配置SSH-KEY

因?yàn)閖enkins需要pull git上的代碼,正常來說,代碼都是私有的,git clone操作的時(shí)候會(huì)需要密碼,就不能完成自動(dòng)化操作了。這里使用SSH-KEY 的方式,讓git clone操作無需密碼就能完成克隆。

2.1.1、生成/添加SSH公鑰

在jenkins所在環(huán)境里執(zhí)行:

ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"

注意:這里的 xxxxx@xxxxx.com 只是生成的 sshkey 的名稱,并不約束或要求具體命名為某個(gè)郵箱。

現(xiàn)網(wǎng)的大部分教程均講解的使用郵箱生成,其一開始的初衷僅僅是為了便于辨識(shí)所以使用了郵箱。

按照提示完成三次回車,即可生成 ssh key。通過查看 ~/.ssh/id_ed25519.pub 文件內(nèi)容,獲取到你的 public key。

圖片圖片

得到公鑰 public key 內(nèi)容。

cat ~/.ssh/id_ed25519.pub

復(fù)制備用。

2.1.2、將公鑰配置到git平臺(tái)

git平臺(tái)可以是github,gitee,也可以是自己搭建的gitlab等。

我這里使用gitee。

通過倉庫主頁 「管理」->「部署公鑰管理」->「添加部署公鑰」 ,添加生成的 public key 添加到倉庫中。

圖片圖片

添加成功后,到j(luò)enkins所在環(huán)境運(yùn)行。

ssh -T git@gitee.com

圖片圖片

首次使用需要確認(rèn)并添加主機(jī)到本機(jī)SSH可信列表。若返回 Hi XXX! You’ve successfully authenticated, but Gitee.com does not provide shell access. 內(nèi)容,則證明添加成功。

2.1.3、測試

復(fù)制你項(xiàng)目的SSH鏈接;

圖片圖片

在jenkins所在環(huán)境;

執(zhí)行g(shù)it clone git@gitee.com:xxxx.git;

圖片圖片

2.2、配置Jenkins的pipeline 自動(dòng)clone代碼

2.2.1、Jenkins創(chuàng)建任務(wù)

新建任務(wù);

圖片圖片

選擇流水線 確定;

圖片圖片

這里勾選參數(shù)化構(gòu)建,選擇字符參數(shù),用于輸入構(gòu)建代碼的版本;

圖片圖片

默認(rèn)值填master,根據(jù)自身項(xiàng)目實(shí)際填寫:

圖片圖片

拉到最下面的流水線,寫pipeline腳本,如果不知道怎么寫,可以點(diǎn)擊流水線語法進(jìn)行參考:

圖片圖片

這是我的腳本, REPOSITORY 填寫項(xiàng)目的ssh地址,REPOSITORY_VERSION是剛剛配置的構(gòu)建參數(shù):

pipeline {
    agent any
    
    environment {
        REPOSITORY="git@gitee.com:xxxxxx/cloud-demo.git"
    }
    
    stages {
        stage('拉代碼') {
            steps {
                echo "start fetch code from git:${REPOSITORY}"
                deleteDir()
                git branch: "${REPOSITORY_VERSION}", url: "${REPOSITORY}"
            }
        }
    }
}

保存

2.2.2、測試?yán)a流程

返回Jenkins 首頁,選擇剛剛創(chuàng)建的項(xiàng)目。

圖片圖片

點(diǎn)擊右邊的運(yùn)行按鈕;

圖片圖片

輸入代碼分支版本;

點(diǎn)擊開始構(gòu)建;

圖片圖片

看到這里就是已經(jīng)構(gòu)建成功了;

圖片圖片

根據(jù)日志提示的目錄,可以看到目錄下已經(jīng)有代碼了。

3、通過maven構(gòu)建代碼

3.1、maven插件安裝

因?yàn)檫@里使用到了maven,jenkins需要先安裝maven工具。

3.2、maven構(gòu)建項(xiàng)目

補(bǔ)充pipeline腳本。

pipeline {
    agent any
    
    environment {
        REPOSITORY="git@gitee.com:xxxxxx/cloud-demo.git"
        MODULE="cloud-demo-m-test-dubbo-service"
    }
    
    stages {
        stage('拉代碼') {
            steps {
                echo "start fetch code from git:${REPOSITORY}"
                deleteDir()
                git branch: "${REPOSITORY_VERSION}", url: "${REPOSITORY}"
            }
        }
        
        stage('編譯代碼') {
            steps {
                echo "start compile"
                sh "cd cloud-demo-project && mvn -U clean install"
                echo "compile project ................................"
                sh "cd cloud-demo-dependencies && mvn -U clean install"
                echo "compile dependencies ................................"
                sh "cd cloud-demo-common && mvn -U clean install"
                echo "compile common ................................"
                sh "cd cloud-demo-m-test && mvn -U -am clean install"
                echo "compile m-test ................................"
                sh "cd cloud-demo-m-test/cloud-demo-m-test-common && mvn -U -am clean install"
                echo "compile m-test-dubbo-api ................................"
                sh "cd cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-api && mvn -U -am clean install"
                echo "compile m-test-dubbo-service ................................"
                sh "cd cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service && mvn -U -am clean package"
            }
        }
    }
}

這里補(bǔ)充了stage('編譯代碼') {} 部分,用于maven編譯。具體編譯腳本需要根據(jù)自己項(xiàng)目實(shí)際,這個(gè)是我項(xiàng)目的編譯必須步驟。

3.3測試?yán)a流程+構(gòu)建項(xiàng)目過程

重復(fù)2.2.2步驟,查看運(yùn)行結(jié)果;

圖片圖片

構(gòu)建成功

4、將maven構(gòu)建后的jar打包成docker鏡像 并 push docker鏡像到docker registry

在jenkins環(huán)境下;

創(chuàng)建目錄用于存放腳本文件;

mkdir /usr/local/project/.env/cloud-demo-m-test-dubbo-service/ -p

這個(gè)目錄下存放4個(gè)文件。

  • build.sh
  • Dockerfile
  • application.properties
  • bootstrap.properties

application.properties 和 bootstrap.properties 是springcloud的配置文件,內(nèi)容根據(jù)自己項(xiàng)目情況

buils.sh 文件內(nèi)容;

#!/usr/bin/env bash

REPOSITORY_VERSION=$1
GIT_REVISION=`git log -1 --pretty=format:"%h"`
TIME=`date "+%Y.%m.%d.%H.%M"`
IMAGE_NAME=192.168.31.100:5000/cloud-demo/cloud-demo-m-test-dubbo-service
IMAGE_TAG=${REPOSITORY_VERSION}-${GIT_REVISION}-${TIME}

docker build -t ${IMAGE_NAME}:${IMAGE_TAG} .

docker push ${IMAGE_NAME}:${IMAGE_TAG}

echo "${IMAGE_NAME}:${IMAGE_TAG}" > IMAGE
## 內(nèi)容說明
REPOSITORY_VERSION 是需要傳入的參數(shù),傳項(xiàng)目git分支名,用于打標(biāo)簽使用
GIT_REVISION 是獲取當(dāng)前git的提交版本 如 c9c8525,線上問題可以根據(jù)這個(gè)版本查找具體代碼問題
TIME 年.月.日.時(shí).分  記錄打包時(shí)間,也用于打標(biāo)簽使用
IMAGE_NAME 鏡像名,這里前綴包含了192.168.31.100:5000 是因?yàn)槲掖虬髸?huì)push到192.168.31.100:5000,其他服務(wù)器可以到這里來pull鏡像
docker build -t ${IMAGE_NAME}:${IMAGE_TAG} . 構(gòu)建鏡像
docker push ${IMAGE_NAME}:${IMAGE_TAG}  推送鏡像
echo "${IMAGE_NAME}:${IMAGE_TAG}" > IMAGE  把鏡像名:鏡像標(biāo)簽 輸出到IMAGE文件里,方便后續(xù)步驟獲取

Dockerfile 文件內(nèi)容;

FROM openjdk:8u342-jdk
MAINTAINER yanger yanger@qq.com

COPY target/cloud-demo-m-test-dubbo-service-1.0-SNAPSHOT.jar /cloud-demo-m-test-dubbo-service.jar
COPY application.properties /application.properties
COPY bootstrap.properties /bootstrap.properties
ENTRYPOINT ["java", "-jar", "/cloud-demo-m-test-dubbo-service.jar"]
## 內(nèi)容說明
FROM openjdk:8u342-jdk 使用openjdk:8u342-jdk 作為基礎(chǔ)鏡像
COPY 文件到鏡像
ENTRYPOINT ["java", "-jar", "/cloud-demo-m-test-dubbo-service.jar"] 啟動(dòng)時(shí)運(yùn)行 java -jar /cloud-demo-m-test-dubbo-service.jar

這里用到了docker registry 如果還沒有registry 請(qǐng)先啟動(dòng),可以用docker的方式啟動(dòng);

docker run -d -p 5000:5000 --name registry registry

build.sh文件需要可執(zhí)行權(quán)限;

chmod 755 build.sh

補(bǔ)充pipeline腳本;

pipeline {
    agent any
    
    environment {
        REPOSITORY="git@gitee.com:xxxxxx/cloud-demo.git"
        SCRIPT_PATH="/usr/local/project/.env/cloud-demo-m-test-dubbo-service/"
    }
    
    stages {
        stage('拉代碼') {
            steps {
                echo "start fetch code from git:${REPOSITORY}"
                deleteDir()
                git branch: "${REPOSITORY_VERSION}", url: "${REPOSITORY}"
            }
        }
        
        stage('編譯代碼') {
            steps {
                echo "start compile"
                sh "cd cloud-demo-project && /usr/local/maven/bin/mvn -U clean install"
                echo "compile project ................................"
                sh "cd cloud-demo-dependencies && /usr/local/maven/bin/mvn -U clean install"
                echo "compile dependencies ................................"
                sh "cd cloud-demo-common && /usr/local/maven/bin/mvn -U clean install"
                echo "compile common ................................"
                sh "cd cloud-demo-m-test && /usr/local/maven/bin/mvn -U -am clean install"
                echo "compile m-test ................................"
                sh "cd cloud-demo-m-test/cloud-demo-m-test-common && /usr/local/maven/bin/mvn -U -am clean install"
                echo "compile m-test-dubbo-api ................................"
                sh "cd cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-api && /usr/local/maven/bin/mvn -U -am clean install"
                echo "compile m-test-dubbo-service ................................"
                sh "cd cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service && /usr/local/maven/bin/mvn -U -am clean package"
            }
        }

        stage('構(gòu)建鏡像') {
            steps {
                echo "start build image"
                sh "cp ${SCRIPT_PATH}/build.sh cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service/"
                sh "cp ${SCRIPT_PATH}/Dockerfile cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service/"
                sh "cp ${SCRIPT_PATH}/application.properties cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service/"
                sh "cp ${SCRIPT_PATH}/bootstrap.properties cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service/"
                sh "cd cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service/ && ./build.sh ${REPOSITORY_VERSION}"
            }
        }

    }
}

補(bǔ)充了stage(‘構(gòu)建鏡像’){} 內(nèi)容和 environment 部分加了個(gè)參數(shù) SCRIPT_PATH。

SCRIPT_PATH參數(shù)是上面創(chuàng)建的文件夾路徑。

stage(‘構(gòu)建鏡像’){}這一步是復(fù)制相應(yīng)文件到項(xiàng)目目錄下,并且執(zhí)行build.sh腳本。

測試

圖片圖片

可以看到鏡像已經(jīng)打包好,并且已經(jīng)push到registry了。

瀏覽器訪問http://192.168.31.100:5000/v2/cloud-demo/cloud-demo-m-test-dubbo-service/tags/list。

可以看到registry有cloud-demo/cloud-demo-m-test-dubbo-service:master-7012e1d-2023.05.01.10.16這個(gè)鏡像。

5、通過k8s發(fā)起 發(fā)布/更新 服務(wù) 操作

5.1、配置構(gòu)建K8S資源的描述文件

在 /usr/local/project/.env/cloud-demo-m-test-dubbo-service/ 目錄新增文件 cloud-demo-m-test-dubbo-service.yaml。

文件內(nèi)容;

apiVersion: apps/v1
kind:Deployment
metadata:
creationTimestamp:null
labels:
    app:cloud-demo-m-test-dubbo-service
name:cloud-demo-m-test-dubbo-service
spec:
replicas:1
selector:
    matchLabels:
      app:cloud-demo-m-test-dubbo-service
strategy:{}
template:
    metadata:
      creationTimestamp:null
      labels:
        app:cloud-demo-m-test-dubbo-service
    spec:
      containers:
      -image:IMAGE_AND_TAG
        name:cloud-demo-m-test-dubbo-service
        resources:{}
        volumeMounts:
        -name:log-path
          mountPath:/logs
      volumes:
      -name:log-path
        hostPath:
          path:/root/k8s/cloud-demo-m-test-dubbo-service/logs
status:{}

---

apiVersion:v1
kind:Service
metadata:
creationTimestamp:null
labels:
    app:cloud-demo-m-test-dubbo-service
name:cloud-demo-m-test-dubbo-service
spec:
ports:
-port:20881
    protocol:TCP
    targetPort:20881
selector:
    app:cloud-demo-m-test-dubbo-service
type:NodePort
status:
loadBalancer:{}

這個(gè)文件是構(gòu)建K8S資源的描述文件,創(chuàng)建deployment 和service,暴露端口20881,掛載/logs目錄到主機(jī)。

其中 IMAGE_AND_TAG 是需要替換為相應(yīng) 容器名:容器標(biāo)簽 的。

5.2、完善jenkins步驟

pipeline {
    agent any
    
    environment {
        REPOSITORY="git@gitee.com:xxxxxx/cloud-demo.git"
        SCRIPT_PATH="/usr/local/project/.env/cloud-demo-m-test-dubbo-service"
        IMAGE=""
    }
    
    stages {
        stage('拉代碼') {
            steps {
                echo "start fetch code from git:${REPOSITORY}"
                deleteDir()
                git branch: "${REPOSITORY_VERSION}", url: "${REPOSITORY}"
            }
        }
        
        stage('編譯代碼') {
            steps {
                echo "start compile"
                sh "cd cloud-demo-project && /usr/local/maven/bin/mvn -U clean install"
                echo "compile project ................................"
                sh "cd cloud-demo-dependencies && /usr/local/maven/bin/mvn -U clean install"
                echo "compile dependencies ................................"
                sh "cd cloud-demo-common && /usr/local/maven/bin/mvn -U clean install"
                echo "compile common ................................"
                sh "cd cloud-demo-m-test && /usr/local/maven/bin/mvn -U -am clean install"
                echo "compile m-test ................................"
                sh "cd cloud-demo-m-test/cloud-demo-m-test-common && /usr/local/maven/bin/mvn -U -am clean install"
                echo "compile m-test-dubbo-api ................................"
                sh "cd cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-api && /usr/local/maven/bin/mvn -U -am clean install"
                echo "compile m-test-dubbo-service ................................"
                sh "cd cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service && /usr/local/maven/bin/mvn -U -am clean package"
            }
        }

        stage('構(gòu)建鏡像') {
            steps {
                echo "start build image"
                sh "cp ${SCRIPT_PATH}/build.sh cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service/"
                sh "cp ${SCRIPT_PATH}/Dockerfile cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service/"
                sh "cp ${SCRIPT_PATH}/application.properties cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service/"
                sh "cp ${SCRIPT_PATH}/bootstrap.properties cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service/"
                sh "cd cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service/ && ./build.sh ${REPOSITORY_VERSION}"
            }
        }

        stage('發(fā)布') {
            steps {
                echo "start deploy"
                script {
                    IMAGE = readFile "cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service/IMAGE"
                    IMAGE = IMAGE.trim()
                    if (IMAGE == "") {
                        throw new Exception("獲取鏡像名文件失敗,請(qǐng)重試")
                    }
                }
                echo "IMAGE: -- ${IMAGE}"
                sh "cp ${SCRIPT_PATH}/cloud-demo-m-test-dubbo-service.yaml cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service/"
                sh "sed -i \"s#IMAGE_AND_TAG#${IMAGE}#g\" cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service/cloud-demo-m-test-dubbo-service.yaml"
                sh "kubectl apply -f cloud-demo-m-test/dubbo/cloud-demo-m-test-dubbo-service/cloud-demo-m-test-dubbo-service.yaml"
            }
        }
    }
}

添加了 stage('發(fā)布') {} 部分

  • 通過讀取IMAGE文件,獲取鏡像名:鏡像標(biāo)簽
  • 如果獲取不到鏡像名:鏡像標(biāo)簽,拋出異常
  • 將cloud-demo-m-test-dubbo-service.yaml文件復(fù)制到工作目錄
  • 用鏡像名:鏡像標(biāo)簽 替換掉 IMAGE_AND_TAG
  • 使用kubectl命令發(fā)布/更新服務(wù)

5.3、測試

在jenkins上構(gòu)建項(xiàng)目

圖片圖片

在K8S master服務(wù)器上,執(zhí)行。

kubectl get all

圖片圖片

搞定。

責(zé)任編輯:武曉燕 來源: 碼猿技術(shù)專欄
相關(guān)推薦

2023-09-12 07:06:04

2023-09-14 20:55:52

NodeJSDocker

2023-06-15 10:00:00

Jenkins任務(wù)操作

2024-04-08 13:59:03

大模型Replicate

2021-12-02 07:50:29

分支服務(wù)git worktre

2015-02-09 15:25:52

換膚

2020-05-14 12:09:56

Centos7EFK部署

2018-01-09 16:45:31

離線網(wǎng)絡(luò)網(wǎng)絡(luò)安全一鍵式部署

2025-04-29 10:13:58

2012-07-03 16:03:07

2015-06-09 10:36:13

Cloud FoundAzurePaaS

2023-09-08 23:30:19

2015-07-30 16:18:14

企業(yè)網(wǎng)D1Net

2025-02-06 09:22:28

2022-07-22 14:32:29

賬號(hào)登錄服務(wù)鴻蒙

2019-08-06 13:37:55

微服務(wù)架構(gòu)數(shù)據(jù)

2015-11-03 15:29:49

ONOS開放網(wǎng)絡(luò)操作系統(tǒng)SDN

2023-03-05 23:11:07

Go語言服務(wù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)