基于k8s構(gòu)建遷移jenkins持續(xù)集成平臺(tái)

#項(xiàng)目發(fā)布方案

藍(lán)綠發(fā)布

灰度發(fā)布

滾動(dòng)發(fā)布

#k8s默認(rèn)發(fā)布策略

1個(gè)deployment

2個(gè) replicasset?

進(jìn)行一對(duì)一的更新 更新一個(gè) 刪除一個(gè) 直到pod更新完畢

server 通過標(biāo)簽去關(guān)聯(lián)replicasset

#發(fā)布流程設(shè)計(jì)

1. 項(xiàng)目文檔

2. 項(xiàng)目業(yè)務(wù)現(xiàn)狀

3. 項(xiàng)目的實(shí)施(測(cè)試環(huán)境 遷移到線上) (思考 遷移過去失敗了怎么辦 或者是遷移過去一段時(shí)間 失敗了怎么辦? 能不能快速定位問題 快速恢復(fù))

4. 應(yīng)急預(yù)案

sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && \

sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

jenkins創(chuàng)建的job需要發(fā)布一個(gè)java項(xiàng)目?

1. JDK

2. maven

3. git

4. tomcat

job: 代碼編譯(maven) 構(gòu)建鏡像(docker) 拉取代碼(git)

#部署項(xiàng)目到k8s中的參數(shù)構(gòu)建怎么配置?

1. 分支

2. 命名空間

3. pod分別數(shù)

#k8s-secret docker倉(cāng)庫(kù)認(rèn)證

kubectl create secret docker-registry? registry-pull-secret --docker-username=admin --docker-password=Harbor12345 --docker-server=192.168.10.23

============================================================

// 所需插件: Git Parameter/Git/Pipeline/kubernetes/Kubernetes Continuous Deploy

// 公共

def registry = "192.168.10.23"

// 項(xiàng)目

def project = "dev"

def app_name = "java-demo"

def image_name = "${registry}/${project}/${app_name}:${BUILD_NUMBER}"

def git_address = "http://106.13.186.245:5555/root/java-demo.git"

// 認(rèn)證

def secret_name = "registry-pull-secret"

def docker_registry_auth = "60946d6a-2259-4254-8f2c-108f7efdad8e"

def git_auth = "caf3e55d-0f12-4b03-a1bb-1b6ec2c2e189"

def k8s_auth = "de7eb761-d6d5-4692-b14f-c5ab13b10158"

pipeline {

? agent {

? ? kubernetes {

? ? ? ? label "jenkins-slave"

? ? ? ? yaml """

kind: Pod

metadata:

? name: jenkins-slave

spec:

? containers:

? - name: jnlp

? ? image: "${registry}/library/jenkins-slave-jdk:1.8"

? ? imagePullPolicy: Always

? ? volumeMounts:

? ? ? - name: docker-cmd

? ? ? ? mountPath: /usr/bin/docker

? ? ? - name: docker-sock

? ? ? ? mountPath: /var/run/docker.sock

? ? ? - name: maven-cache

? ? ? ? mountPath: /root/.m2

? volumes:

? ? - name: docker-cmd

? ? ? hostPath:

? ? ? ? path: /usr/bin/docker

? ? - name: docker-sock

? ? ? hostPath:

? ? ? ? path: /var/run/docker.sock

? ? - name: maven-cache

? ? ? hostPath:

? ? ? ? path: /tmp/m2

"""

? ? ? ? }


? ? ? }

? ? parameters {? ?

? ? ? ? gitParameter branch: '', branchFilter: '.*', defaultValue: 'master', description: '選擇發(fā)布的分支', name: 'Branch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH'

? ? ? ? choice (choices: ['1', '3', '5', '7'], description: '副本數(shù)', name: 'ReplicaCount')

? ? ? ? choice (choices: ['dev','test','prod'], description: '命名空間', name: 'Namespace')

? ? }

? ? stages {

? ? ? ? stage('拉取代碼'){

? ? ? ? ? ? steps {

? ? ? ? ? ? ? ? checkout([$class: 'GitSCM',

? ? ? ? ? ? ? ? branches: [[name: "${params.Branch}"]],

? ? ? ? ? ? ? ? doGenerateSubmoduleConfigurations: false,

? ? ? ? ? ? ? ? extensions: [], submoduleCfg: [],

? ? ? ? ? ? ? ? userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]

? ? ? ? ? ? ? ? ])

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? stage('代碼編譯'){

? ? ? ? ? steps {

? ? ? ? ? ? sh """

? ? ? ? ? ? ? ? mvn clean package -Dmaven.test.skip=true

? ? ? ? ? ? ? ? """

? ? ? ? ? }

? ? ? ? }

? ? ? ? stage('構(gòu)建鏡像'){

? ? ? ? ? steps {

? ? ? ? ? ? ? ? withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {

? ? ? ? ? ? ? ? sh """

? ? ? ? ? ? ? ? ? echo '

? ? ? ? ? ? ? ? ? ? FROM ${registry}/library/tomcat:v1

? ? ? ? ? ? ? ? ? ? LABEL maitainer lizhenliang

? ? ? ? ? ? ? ? ? ? RUN rm -rf /usr/local/tomcat/webapps/*

? ? ? ? ? ? ? ? ? ? ADD target/*.war /usr/local/tomcat/webapps/ROOT.war

? ? ? ? ? ? ? ? ? ' > Dockerfile

? ? ? ? ? ? ? ? ? docker build -t ${image_name} .

? ? ? ? ? ? ? ? ? docker login -u ${username} -p '${password}' ${registry}

? ? ? ? ? ? ? ? ? docker push ${image_name}

? ? ? ? ? ? ? ? """

? ? ? ? ? ? ? ? }

? ? ? ? ? }

? ? ? ? }

? ? ? stage('部署到K8S平臺(tái)'){

? ? ? ? ? steps {

? ? ? ? ? ? sh """

? ? ? ? ? ? sed -i 's#IMAGE_NAME#${image_name}#' deploy.yaml

? ? ? ? ? ? sed -i 's#SECRET_NAME#${image_name}#' deploy.yaml

#sed -i 's#SECRET_NAME#${secret_name}#' deploy.yaml

sed -i 's#RSCOUNT#${ReplicaCount}#' deploy.yaml

sed -i 's#NS#${Namespace}#' deploy.yaml

? ? ? ? ? ? """

? ? ? ? ? ? kubernetesDeploy configs: 'deploy.yaml', kubeconfigId: "${k8s_auth}"

? ? ? ? ? }

? ? ? ? }

? ? }

}

======================================================================

1. 怎么讓持續(xù)部署插件讀到y(tǒng)aml文件

yaml進(jìn)行代碼統(tǒng)一版本管理

2. 怎么和參數(shù)化構(gòu)建集合

提供sed進(jìn)行修改yaml的值

#使用jenkins的插件

git

kubernetes

pipeline

kubernetes continuous deploy

#CI/CD環(huán)境特點(diǎn)

slave彈性

基于鏡像隔離構(gòu)建環(huán)境

流水線發(fā)布容易維護(hù)

jenkins參數(shù)化構(gòu)建可幫助完成更復(fù)雜的構(gòu)建

小結(jié):

0. 涉及的所以插件都需要安裝

1. 修改環(huán)境變量的值

2. 參數(shù)化構(gòu)建的名稱就是變量可以在任何地方使用

3. 拉取的代碼是提供git參數(shù)化構(gòu)建動(dòng)態(tài)獲取分支

4. 一些認(rèn)證信息都是保存到 jenkins認(rèn)證里面 pipeline通過憑據(jù)ID獲取

5. pipeline大多數(shù)代碼片段都可以動(dòng)態(tài)去生成

kuberctl rollback deployment 回滾方式

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子雁仲,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件银觅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡坏为,警方通過查閱死者的電腦和手機(jī)究驴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門镊绪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人洒忧,你說我怎么就攤上這事蝴韭。” “怎么了熙侍?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵榄鉴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我蛉抓,道長(zhǎng)庆尘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任芝雪,我火速辦了婚禮减余,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惩系。我一直安慰自己位岔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布堡牡。 她就那樣靜靜地躺著抒抬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晤柄。 梳的紋絲不亂的頭發(fā)上擦剑,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音芥颈,去河邊找鬼惠勒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛爬坑,可吹牛的內(nèi)容都是我干的纠屋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼盾计,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼售担!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起署辉,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤族铆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后哭尝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哥攘,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了献丑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片末捣。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖创橄,靈堂內(nèi)的尸體忽然破棺而出箩做,到底是詐尸還是另有隱情,我是刑警寧澤妥畏,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布邦邦,位于F島的核電站,受9級(jí)特大地震影響醉蚁,放射性物質(zhì)發(fā)生泄漏燃辖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一网棍、第九天 我趴在偏房一處隱蔽的房頂上張望黔龟。 院中可真熱鬧,春花似錦滥玷、人聲如沸氏身。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛋欣。三九已至,卻和暖如春如贷,著一層夾襖步出監(jiān)牢的瞬間陷虎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工杠袱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尚猿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓楣富,卻偏偏與公主長(zhǎng)得像凿掂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子菩彬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359