1、jenkins在k8s內(nèi)部署(請參考其他人的文章)
2、jenkins安裝kubenents相關(guān)插件
3、配置k8s云
????????非常重要,目的是實現(xiàn)jenkins可以遠程調(diào)用k8s進行部署,并可實現(xiàn)安裝jenkins-slave進行構(gòu)建。使得不再依賴jenkins單機能力進行構(gòu)建,比較適合一定規(guī)模的公司。
?插件安裝后,打開jenkins,點擊系統(tǒng)管理-->系統(tǒng)配置-->Clouds,點擊新增一個kubernetes。
具體配置見如下:
3.1 首先配置K8S地址
?
3.2 為K8S云創(chuàng)建Pod Templates
目的是在jenkins構(gòu)建的時候,可以自動在K8S內(nèi)創(chuàng)建一個POD服務于本次構(gòu)建。
以JAVA為例,構(gòu)建時需要使用maven并docker構(gòu)建,然后連接至K8S Master進行遠程發(fā)布。
?在POD容器列表中放了2個Docker鏡像,一個是Maven負責java的build,一個是jnlp創(chuàng)建一個jenkins的slave。
?
3.3? 掛載存儲卷
3.3.1、主要是把maven的repository掛載到宿主機上,以方便多次構(gòu)建后復用。?
3.3.2、宿主機上安裝了docker,把docker命令掛載到K8S的POD內(nèi),使得POD具備了
docker in? docker的能力,如此就可以在該POD內(nèi)進行docker構(gòu)建。
3.3.3、宿主機一般都是被K8S控制的Node,因此一般都裝有kubernets,因此可以把kubectl命令關(guān)在到POD中,使得POD具備執(zhí)行kubectl命令能力,以控制K8S。
?
?請用如下代碼給k8s內(nèi)的jenkins賬號授權(quán)
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins
namespace: zo-jenkins
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: jenkins
namespace: zo-jenkins
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
resources: ["pods/portforward"]
verbs: ["*"]
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
resources: ["pods/log"]
verbs: ["get","list","watch"]
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get"]
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: jenkins
namespace: zo-jenkins
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: jenkins
subjects:
- kind: ServiceAccount
name: jenkins
namespace: zo-jenkins
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: jenkinsClusterRole
namespace: zo-jenkins
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
resources: ["pods/log"]
verbs: ["get","list","watch"]
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get"]
- apiGroups: [ "apps" ]
resources: ["deployments"]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: jenkinsClusterRuleBinding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: jenkinsClusterRole
subjects:
- kind: ServiceAccount
name: jenkins
namespace: zo-jenkins
4、JAVA應用中增加pipeline腳本文章來源:http://www.zghlxwxcb.cn/news/detail-556793.html
#!groovy
pipeline {
agent {
kubernetes {
cloud "k8s-deploy" //選擇名字是kubernetes1的cloud,這里不要修改
label "jenkins-slave"
//yamlFile '' //jenkins-slave部署文件位置,內(nèi)容不要修改
}
}
stages {
stage('初始化環(huán)境') {
steps {
script {
env.APP_NAME = "report-server" //修改為自己的應用名稱
env.APP_CODE = "https://codeup.aliyun.com/xxxxxxx/outsourced/excleToReport/xxx-xxxx.git"
env.CODE_BRANCH = "master" //修改為實際部署的分支
env.DOCKER_IMAGE_URL = "registry.cn-hangzhou.aliyuncs.com/xx-xx/xx-xxx" // 修改DOCKER鏡像地址
env.DOCKER_TAG = "1.0.0"
env.K8S_NAME_SPACE = "zo-home-prd" // 修改應用在K8S內(nèi)的實際部署的命名空間
}
}
}
stage('拉取代碼') {
steps {
echo "1.Git Clone Code"
git branch: "$CODE_BRANCH", credentialsId: 'zo-git-yun', url: "$APP_CODE"
}
}
stage('maven構(gòu)建') {
steps {
container('maven') {
sh 'mvn -s jenkins/settings.xml clean package -e -U -Dmaven.test.skip=true -Dautoconfig.skip'
}
}
}
stage('docker鏡像構(gòu)建') {
steps {
container('maven') { // maven容器確保與宿主機的docker實現(xiàn)docker in docker的能力
sh 'docker build -t $APP_NAME:$DOCKER_TAG .'
sh 'docker tag $APP_NAME:$DOCKER_TAG $DOCKER_IMAGE_URL:$DOCKER_TAG'
sh 'docker push $DOCKER_IMAGE_URL:$DOCKER_TAG'
}
}
}
// 部署到K8s
stage('K8S部署-開發(fā)環(huán)境') {
steps {
container('jenkins-jnlp-slave') {
withKubeConfig(serverUrl: 'https://192.168.10.200:6443') {// 這里配置K8S Master的API地址
echo 'begin k8s deploy!'
sh 'chmod 744 k8s/home-prd/deployment.sh'
sh 'k8s/home-prd/deployment.sh' // 執(zhí)行部署
// --record 用作記錄滾動更新的信息, 后面方便版本回退
//sh 'kubectl set image deployment/$APP_NAME $APP_NAME=$IMAGE_URL --namespace $NAME_SPACE --record'
}
}
}
}
}
options {
buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '5'))
}
}
?文章來源地址http://www.zghlxwxcb.cn/news/detail-556793.html
到了這里,關(guān)于Jenkins使用k8s部署應用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!