基于k8s構建遷移jenkins持續集成平臺

#項目發布方案

藍綠發布

灰度發布

滾動發布

#k8s默認發布策略

1個deployment

2個 replicasset?

進行一對一的更新 更新一個 刪除一個 直到pod更新完畢

server 通過標簽去關聯replicasset

#發布流程設計

1. 項目文檔

2. 項目業務現狀

3. 項目的實施(測試環境 遷移到線上) (思考 遷移過去失敗了怎么辦 或者是遷移過去一段時間 失敗了怎么辦? 能不能快速定位問題 快速恢復)

4. 應急預案

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創建的job需要發布一個java項目?

1. JDK

2. maven

3. git

4. tomcat

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

#部署項目到k8s中的參數構建怎么配置?

1. 分支

2. 命名空間

3. pod分別數

#k8s-secret docker倉庫認證

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"

// 項目

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"

// 認證

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: '選擇發布的分支', name: 'Branch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH'

? ? ? ? choice (choices: ['1', '3', '5', '7'], description: '副本數', 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('構建鏡像'){

? ? ? ? ? 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平臺'){

? ? ? ? ? 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. 怎么讓持續部署插件讀到yaml文件

yaml進行代碼統一版本管理

2. 怎么和參數化構建集合

提供sed進行修改yaml的值

#使用jenkins的插件

git

kubernetes

pipeline

kubernetes continuous deploy

#CI/CD環境特點

slave彈性

基于鏡像隔離構建環境

流水線發布容易維護

jenkins參數化構建可幫助完成更復雜的構建

小結:

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

1. 修改環境變量的值

2. 參數化構建的名稱就是變量可以在任何地方使用

3. 拉取的代碼是提供git參數化構建動態獲取分支

4. 一些認證信息都是保存到 jenkins認證里面 pipeline通過憑據ID獲取

5. pipeline大多數代碼片段都可以動態去生成

kuberctl rollback deployment 回滾方式

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370