阿里雲 k8s 部署 Spring Cloud Alibaba 微服務實踐 (四) 自動化部署


本文使用操作系統為 CentOS 7,Jenkins 版本為 2.277.1

零、准備工作

0.1. 安裝 JDK

本文使用 rpm 安裝:下載 rpm 包

rpm -ivh jdk-8u281-linux-x64.rpm

注:

  1. 無需配置環境變量
  2. 默認下載鏈接需要登錄,將鏈接中的 otn 改為 otn-pub 即可免登錄下載,見:Oracle 免登錄下載 JDK

    0.2. 安裝配置 Maven

    本文 Maven 安裝在:/usr/local/maven,下載 Maven:下載鏈接
tar -zxvf  apache-maven-3.6.3-bin.tar.gz

添加環境變量:

# vi /etc/profile
MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
export PATH=${MAVEN_HOME}/bin:${PATH}
# source /etc/profile
# mvn -v

注:根據實際情況決定是否替換 Maven 源、指定包下載位置等

0.3. 安裝 Git

yum install -y git

0.4. 安裝配置 Docker

本文使用阿里雲鏡像:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl start docker
systemctl enable docker

注:需登錄阿里雲容器鏡像服務

0.5 安裝配置 kubectl

本文使用阿里雲地址:

curl -Lo kubectl http://kubernetes.oss-cn-hangzhou.aliyuncs.com/kubernetes-release/release/v1.20.0/bin/linux/amd64/kubectl && chmod +x ./kubectl && mv ./kubectl /usr/local/bin/kubectl

如果需要在集群外的服務器執行 kubectl 命令,需要先進行連接 Kubernetes 集群配置:

一、安裝配置 Jenkins

1.1. 方法一(本文使用)

使用清華大學 Jenkins 鏡像:

curl -Lo jenkins-2.277.1-1.1.noarch.rpm https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.277.1-1.1.noarch.rpm
rpm -ivh jenkins-2.277.1-1.1.noarch.rpm
systemctl start jenkins
systemctl enable jenkins

1.2. 方法二(未實際測試)

curl -Lo /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins
systemctl start jenkins
systemctl enable jenkins

1.3. 初始化

Jenkins 默認端口為 8080(記得放行),可以根據需要修改,亦可修改其他配置,詳見:Jenkins 使用國內鏡像快速安裝(rpm 安裝)

  1. 訪問:IP:8080,第一次訪問需要輸入密碼,查看密碼:cat /var/lib/jenkins/secrets/initialAdminPassword
  2. 設置管理員賬號
  3. 安裝默認插件

    1.4. 配置

    因為實際測試中 Maven Integration 使用有問題,所以未使用該插件,因此不需要配置 Maven,只需配置 JDK 和 Git 即可:“系統管理”—“全局工具配置”


    注:因 Jenkins 默認執行用戶為 jenkins,會有一些權限問題,所以本文修改執行用戶為 root:
    # vi /etc/sysconfig/jenkins
    JENKINS_USER="root"
    # systemctl restart jenkins
    

二、使用 Jenkins 自動化部署

2.1. 常規部署(適用於測試環境)

  1. 新建任務
  2. 構建一個自由風格的軟件項目
  3. 配置項目 Git 地址、認證、分支等
  4. “構建”—“執行 shell”:
    ## 0.刪除自己構建的包,防止有更新沒有獲取到
    ## rm -rf /usr/local/maven/repository/com/YOUR_COMPANY/*
    ## 1.打包項目
    /usr/local/maven/apache-maven-3.6.3/bin/mvn clean package -Dmaven.test.skip=true
    ## 2.添加 docker 相關文件
    targetDir="/var/project/$JOB_BASE_NAME"
    if [ ! -d "$targetDir" ]; then
         mkdir $targetDir
    fi
    cp -f ./target/*.jar $targetDir/
    cp -f /var/project/Dockerfile $targetDir/
    cd $targetDir
    # 3.構建鏡像、推送
    docker build -t registry.cn-shenzhen.aliyuncs.com/YOUR_NAMESPACE/$JOB_BASE_NAME:latest .
    docker push registry.cn-shenzhen.aliyuncs.com/YOUR_NAMESPACE/$JOB_BASE_NAME:latest
    # 4.升級
    ##kubectl set image deployment $JOB_BASE_NAME $JOB_BASE_NAME=registry.cn-shenzhen.aliyuncs.com/YOUR_NAMESPACE/$JOB_BASE_NAME:latest
    /usr/local/bin/kubectl rollout restart deployment $JOB_BASE_NAME ## 2021/05/08
    

    2.2. 通過 tag 標簽部署(適用於生產環境)

  5. 安裝 Git Parameter 插件
  6. 新建任務
  7. 構建一個自由風格的軟件項目
  8. 配置:

  9. “構建”—“執行 shell”:
    ## 如果是回滾,不需要打包、構建鏡像等操作,直接執行升級命令
    if [ $ROLLBACK -eq 0 ]; then
    ## 0.刪除自己構建的包,防止有更新沒有獲取到
    ## rm -rf /usr/local/maven/repository/com/YOUR_COMPANY/*
    ## 1.打包項目
    /usr/local/maven/apache-maven-3.6.3/bin/mvn clean package -Dmaven.test.skip=true
    ## 2.添加 docker 相關文件
    targetDir="/var/project/$JOB_BASE_NAME"
    if [ ! -d "$targetDir" ]; then
         mkdir $targetDir
    fi
    cp -f ./target/*.jar $targetDir/
    cp -f /var/project/Dockerfile $targetDir/
    cd $targetDir
    # 3.構建鏡像、推送
    docker build -t registry.cn-shenzhen.aliyuncs.com/YOUR_NAMESPACE/$JOB_BASE_NAME:$TAG .
    docker push registry.cn-shenzhen.aliyuncs.com/YOUR_NAMESPACE/$JOB_BASE_NAME:$TAG
    fi
    # 4.升級
    kubectl set image deployment $JOB_BASE_NAME $JOB_BASE_NAME=registry.cn-shenzhen.aliyuncs.com/YOUR_NAMESPACE/$JOB_BASE_NAME:$TAG
    
    以下內容 2021/05/08 更新

    2.3. 部署前端(Vue.js)項目(常規部署)

    如果沒有 Node.js 則需安裝 Node.js 和 cnpm :
    cd /usr/local/
    tar -xvf node-v14.16.1-linux-x64.tar.xz
    mv node-v14.16.1-linux-x64/ nodejs
    ln -s /usr/local/nodejs/bin/npm /usr/bin/npm
    ln -s /usr/local/nodejs/bin/node /usr/bin/node
    npm install cnpm -g --registry=https://registry.npm.taobao.org
    
    部署腳本:
    ## 1.打包項目
    /usr/local/nodejs/bin/cnpm i
    /usr/local/nodejs/bin/npm run build
    ## 2.添加 docker 相關文件
    targetDir="/var/project/$JOB_BASE_NAME"
    if [ ! -d "$targetDir" ]; then
         mkdir $targetDir
    fi
    rm -rf $targetDir/*
    cp -f /var/project/Dockerfile $targetDir/
    cp -rf dist $targetDir/dist
    ## 如果是公眾號項目需要拷貝公眾號的 txt 文件
    ## cp /var/project/XXXXXXXXX.txt  $targetDir/dist/XXXXXXXXX.txt
    cd $targetDir
    # 3.構建鏡像、推送
    docker build -t registry.cn-shenzhen.aliyuncs.com/YOUR_NAMESPACE/$JOB_BASE_NAME:latest .
    docker push registry.cn-shenzhen.aliyuncs.com/YOUR_NAMESPACE/$JOB_BASE_NAME:latest
    # 4.升級
    /usr/local/bin/kubectl rollout restart deployment $JOB_BASE_NAME
    
    其中 Dockerfile 內容:
    FROM nginx:alpine
    MAINTAINER VictorBu <VictorBu.xx@gmail.com>
    ADD dist /usr/share/nginx/html
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM