K8S發(fā)版腳本

# tree 
.
├── generateyaml.sh
├── Jenkinsfiletemplate
├── kubernetes
│   ├── Dockerfile_template
│   ├── start
│   ├── template-deployment-addnew.yaml
│   └── template-ingress.yaml
└── shell
    └── template.sh

3 directories, 6 files

template.sh

#!/bin/bash
#定義變量
shell_version=shell_dev

config_version=config_dev

Dockerfile_version=Dockerfiledev

JOB_NAME=

service_name=

pod_name=

# ingresshost=

# secret_name=
# 定義數(shù)組
port_state=(
)
service_state=(
)
# 更新時間:2021年5月18日18點19分
# 優(yōu)化:將容器啟動命令放置yaml文件
# 優(yōu)化:修改yaml文件的鏡像
# 最新更新:2021年5月19日18點22分
# 修改:添加了config_version
# ==========================腳本開始===================================
# ====================================================================

#清理環(huán)境

mkdir -p ${shell_version}
# 備份
cp -a ./kubernetes/Dockerfile_template ./kubernetes/${Dockerfile_version}
cp -a Jenkinsfiletemplate Jenkinsfile

sed -i s/config_version/${config_version}/g ./kubernetes/${Dockerfile_version}


# # ==================================ingress=================================================
# for i in ${service_state[*]}
# do
# ##### ==================================ingress.yaml====================================
#     cp ./kubernetes/template-ingress.yaml ./kubernetes/${JOB_NAME}_$i-ingress.yaml
    
#     sed -i s/pod-name/${pod_name}-$i/g ./kubernetes/${JOB_NAME}_$i-ingress.yaml
#     sed -i s/ingresshost/${ingresshost}/g ./kubernetes/${JOB_NAME}_$i-ingress.yaml
#     sed -i s/secret-name/${secret_name}/g ./kubernetes/${JOB_NAME}_$i-ingress.yaml
# done

# for j in ${!service_state[*]}
# do
#     # ingress端口替換
#     sed -i s/PORTnumber/${port_state[j]}/g ./kubernetes/${JOB_NAME}_${service_state[j]}-ingress.yaml
# done
# ##### ==================================================================================
# ##### ==================================ingress.sh======================================
# for i in ${service_state[*]}
# do
#     echo "setsid script -c 'sudo kubectl apply -f ./kubernetes/${JOB_NAME}_$i-ingress.yaml --record'">>./${shell_version}/ingress.sh
# done
# # ==============================================================================================



# 批量生成不同服務(wù)的yaml文件
for i in ${service_state[*]}
do
    cp ./kubernetes/template-deployment-addnew.yaml ./kubernetes/${JOB_NAME}_$i-deployment-addnew.yaml
    
    sed -i s/pod-name/${pod_name}-$i/g ./kubernetes/${JOB_NAME}_$i-deployment-addnew.yaml
    sed -i s/images_name/${JOB_NAME}/g ./kubernetes/${JOB_NAME}_$i-deployment-addnew.yaml
    sed -i s/service_state/$i/g ./kubernetes/${JOB_NAME}_$i-deployment-addnew.yaml
    sed -i s/service_name/${service_name}/g ./kubernetes/${JOB_NAME}_$i-deployment-addnew.yaml
    sed -i s/config_version/${config_version}/g ./kubernetes/${JOB_NAME}_$i-deployment-addnew.yaml

done

for j in ${!service_state[*]}
do
    # deployment端口替換
    sed -i s/PORTnumber/${port_state[j]}/g ./kubernetes/${JOB_NAME}_${service_state[j]}-deployment-addnew.yaml
done

# ====================================================================
# ====================buildrsync.sh===================================

cat > ./${shell_version}/build.sh << EOF
#!/bin/bash
export GO111MODULE=on
export GOROOT=/usr/local/go16
export GOPROXY=https://goproxy.cn,direct
git config --global url."ssh://git@gitlab.heywoods.cn/".insteadOf "https://gitlab.heywoods.cn/"
export GOPRIVATE=gitlab.heywoods.cn
export GONOPROXY=gitlab.heywoods.cn
export GONOSUMDB=gitlab.heywoods.cn
/usr/local/go16/bin/go build  -mod=mod -o ./${service_name} /opt/applications/go/src/${JOB_NAME}/${service_name}.go
if [ $? -ne 0 ]; then
    exit 1
fi
cp ${service_name} kubernetes/start/${service_name}

EOF

# ====================================================================
# ====================buildrsync.sh===================================

cat > ./${shell_version}/buildrsync.sh << EOF
/usr/bin/rsync  -avz  ./* /opt/applications/go/src/${JOB_NAME}/
/usr/bin/rsync  -avz   --exclude={kubernetes,Jenkinsfile_dev,shell_version,${shell_version}}  ./*   ./kubernetes/start/
EOF
# ====================================================================
# =======================buildocker.sh================================
cat > ./${shell_version}/buildocker.sh << EOF
build_tag=\$1

docker build -t heywoods/${JOB_NAME}:\${build_tag} -f ./kubernetes/${Dockerfile_version} .
docker tag heywoods/${JOB_NAME}:\${build_tag} harboral.heywoods.cn/app/${JOB_NAME}:\${build_tag}

EOF

# ====================================================================
# ========================pushdocker.sh===============================
cat > ./${shell_version}/pushdocker.sh << EOF
harborUser=\$1
harborPassword=\$2
build_tag=\$3

docker login -u \${harborUser} -p \${harborPassword} harboral.heywoods.cn
docker push harboral.heywoods.cn/app/${JOB_NAME}:\${build_tag}

EOF

# ====================================================================
# ===================cleandocker.sh===================================
cat > ./${shell_version}/cleandocker.sh << EOF
build_tag=\$1

docker rmi heywoods/${JOB_NAME}:\${build_tag}
docker rmi harboral.heywoods.cn/app/${JOB_NAME}:\${build_tag}
EOF

# ==================deployment.sh=====================================
for i in ${service_state[*]}
do
    echo setsid script -c \"sudo kubectl apply -f ./kubernetes/${JOB_NAME}_$i-deployment-addnew.yaml --record\">>./${shell_version}/deployment.sh
done

# ===================Jenkinsfile======================================
sed -i s/shell_version/${shell_version}/g Jenkinsfile

for i in ${service_state[*]}
do
    echo    sh \"sed -i "'"s/\<BUILD_TAG\>/\$\{build_tag\}/"'" ./kubernetes/${JOB_NAME}_$i-deployment-addnew.yaml\">>Jenkinsfile
    echo    sh \"sed -i "'"s/\<BRANCH_NAME\>/\$\{env.BRANCH_NAME\}/"'" ./kubernetes/${JOB_NAME}_$i-deployment-addnew.yaml\">>Jenkinsfile
    
done

cat >>Jenkinsfile <<EOF
            sh "./shell/deployment.sh"
            sh "./shell/ingress.sh"
            }
}
EOF
# ====================================================================
# ==========================腳本結(jié)束===================================




Dockerfile_template

FROM centos:7.5.1804

MAINTAINER heywoods
ENV PROJECT_DIR=/usr/src
ENV TZ=Asia/Shanghai


RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN yum install -y glibc-devel gcc c++ net-tools psmisc

COPY ./kubernetes/start /usr/src/start
# 2021年5月18日18點48分:刪除了復(fù)制二進(jìn)制包的步驟
COPY config_version.yml /usr/src/start/config_version.yml


WORKDIR $PROJECT_DIR/start


template-deployment-addnew.yaml

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: pod-name-deployment
  namespace: heywoods-app
spec:
  strategy:
    rollingUpdate:
      maxSurge: 100%
      maxUnavailable: 0%
  replicas: 1
  template:
    metadata:
      labels:
        app: pod-name
    spec:
      containers:
      - name: heywoods-golang
        image: "harboral.heywoods.cn/app/images_name:<BUILD_TAG>"
        command: ["/bin/sh"]
        args: ["-c","./service_name service_state --config config_version.yml"]
        imagePullPolicy: IfNotPresent
        env:
        - name: branch
          value: <BRANCH_NAME>
        - name: JAEGER_AGENT_HOST
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
        resources:
          limits:
            cpu: 400m
            memory: 512Mi
          requests:
            cpu: 200m
            memory: 200Mi
        ports:
        - containerPort: PORTnumber
      imagePullSecrets:
        - name: harbor-secret
---
kind: Service
apiVersion: v1
metadata:
  name: pod-name-service
  namespace: heywoods-app
  labels:
    app: pod-name
spec:
  ports:
  - name: http
    protocol: TCP
    port: PORTnumber
    targetPort: PORTnumber
  selector:
    app: pod-name
  # Minikube needs NodePort to work.
  type: ClusterIP
  #type: NodePort
  sessionAffinity: None

template-ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: pod-name-ingress
  namespace: heywoods-app
spec:
  tls:
    - hosts:
        - ingresshost
      secretName: secret-name
  rules:
    - host: ingresshost
      http:
        paths:
          - path: /
            backend:
              serviceName: pod-name-service
              servicePort: PORTnumber

generateyaml.sh

#!/bin/bash
# 清理環(huán)境
find . -type f '!' -name 'Dockerfile_template' '!' -name 'template*' '!' -name 'generateyaml.sh' '!' -name 'Jenkinsfiletemplate'  |xargs rm -rf
# 字符轉(zhuǎn)化
dos2unix shell/template.sh
# 執(zhí)行yaml文件自動生成腳本
sh -x shell/template.sh

Jenkinsfiletemplate

#!/usr/bin/env groovy
node {
    stage('獲取源碼-master') {
        echo "1.Prepare Stage"
            checkout([$class: 'GitSCM',
                    branches: [[name: "${params.tag}"]],
                    doGenerateSubmoduleConfigurations: false,
                    extensions: [],
                    gitTool: 'Default',
                    submoduleCfg: [],
                    userRemoteConfigs: [[url: '']]
            ])
            build_tag = "${params.tag}"
    }
    stage('編譯') {
                echo "2.Build Stage"
                    sh "chmod u+x ./shell_version/*.sh"
                    sh "./shell_version/buildrsync.sh"
                    sh "./shell_version/build.sh"
        }
    stage('構(gòu)建鏡像') {
                echo "3.Build Docker Image Stage"
                sh "./shell_version/buildocker.sh ${build_tag}"
                sh "sleep 2"
        }
         stage('上傳鏡像') {
                echo "4.Push Docker Image Stage"
                    withCredentials([usernamePassword(credentialsId: 'harbor', passwordVariable: 'harborPassword', usernameVariable: 'harborUser')]) {
                        sh "./shell_version/pushdocker.sh ${harborUser} ${harborPassword} ${build_tag}"
                    }
         }
    stage('清理本地鏡像') {
                echo "4.Clean Local Docker Image"
                sh "./shell_version/cleandocker.sh ${build_tag}"
    }
    stage('K8S構(gòu)建項目') {
                echo "5. Deploy Stage"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咙冗,一起剝皮案震驚了整個濱河市基矮,隨后出現(xiàn)的幾起案子井辜,更是在濱河造成了極大的恐慌布蔗,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拯刁,死亡現(xiàn)場離奇詭異,居然都是意外死亡逝段,警方通過查閱死者的電腦和手機(jī)垛玻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門割捅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帚桩,你說我怎么就攤上這事亿驾。” “怎么了账嚎?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵莫瞬,是天一觀的道長。 經(jīng)常有香客問我郭蕉,道長疼邀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任召锈,我火速辦了婚禮旁振,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涨岁。我一直安慰自己拐袜,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布梢薪。 她就那樣靜靜地躺著蹬铺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秉撇。 梳的紋絲不亂的頭發(fā)上丛塌,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音畜疾,去河邊找鬼赴邻。 笑死,一個胖子當(dāng)著我的面吹牛啡捶,可吹牛的內(nèi)容都是我干的姥敛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼瞎暑,長吁一口氣:“原來是場噩夢啊……” “哼彤敛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起了赌,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤墨榄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后勿她,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袄秩,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了之剧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郭卫。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖背稼,靈堂內(nèi)的尸體忽然破棺而出贰军,到底是詐尸還是另有隱情,我是刑警寧澤蟹肘,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布词疼,位于F島的核電站,受9級特大地震影響帘腹,放射性物質(zhì)發(fā)生泄漏贰盗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一竹椒、第九天 我趴在偏房一處隱蔽的房頂上張望童太。 院中可真熱鬧,春花似錦胸完、人聲如沸书释。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爆惧。三九已至,卻和暖如春锨能,著一層夾襖步出監(jiān)牢的瞬間扯再,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工址遇, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留熄阻,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓倔约,卻偏偏與公主長得像秃殉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子浸剩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 容器技術(shù)概念入門篇 從進(jìn)程說開去 容器本身沒有價值钾军,有價值的是“容器編排”。 容器其實是一種沙盒技術(shù)绢要。顧名思義吏恭,沙...
    白板時鐘閱讀 2,519評論 0 2
  • 我們學(xué)習(xí)語言第一個想法就是在環(huán)境搭建好了之后寫一個Helloworld,我們學(xué)習(xí)如何在 k8s 上部署應(yīng)用時重罪,部署...
    集韻增廣閱讀 1,003評論 0 3
  • 以下所有環(huán)境都在vmware 15完成樱哼。 ===================centos7基礎(chǔ)初始化=====...
    Status_3175閱讀 17,530評論 1 1
  • 適用于大部分項目(大同小異) 一哀九、 項目遷移到K8S平臺是怎樣的流程 要以鏡像作為交付對象,不再以jar包唇礁、war...
    Linux丶晨星閱讀 2,824評論 0 2
  • 今天感恩節(jié)哎勾栗,感謝一直在我身邊的親朋好友惨篱。感恩相遇盏筐!感恩不離不棄。 中午開了第一次的黨會砸讳,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,562評論 0 11