您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)微服務(wù)如何自動化部署CI/CD,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
apiVersion: v1
kind: Service
metadata:
name: jenkins-service
namespace: default
labels:
app: jenkins
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
protocol: TCP
nodePort: 30600
name: jenkins
- port: 30000
targetPort: 30000
nodePort: 30000
protocol: TCP
name: agent
selector:
app: jenkins
tier: jenkins
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins-deployment
labels:
app: jenkins
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: jenkins
tier: jenkins
spec:
containers:
- name: jenkins
image: jenkinsci/blueocean:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
name: jenkins
- containerPort: 30000
name: agent
volumeMounts:
- mountPath: /var/jenkins_home
name: jenkins-data
- mountPath: /data/jenkins
name: jenkins-log-path
volumes:
- name: jenkins-data
hostPath:
path: /home/demo/jenkins
- name: jenkins-log-path
hostPath:
path: /data/jenkins
接下來通過頁面訪問該服務(wù),首次打開后,會讓輸入一個admin的密鑰,這一串字符可以在日志中找到,執(zhí)行kubectl logs -f test-jenkins-c6bd58bf9-tgmsa即可,輸入一串字符后,進入下一步,需要安裝一些插件,在安裝插件的時候,需要注意的是,選擇jenkins的image不同,其所需安裝的插件也是不一樣的,有的可能image已經(jīng)存在了。
具體請看:https://jenkins.io/zh/doc/book/installing/
安裝完插件后,進入下一步,創(chuàng)建第一個賬戶,管理員賬戶,一般建議創(chuàng)建,方便后面使用,注:郵箱也需要填寫。
完成以上后,我們進入正式界面:
第一步:點擊系統(tǒng)管理--->插件管理,添加一些插件,這里有用到kubernetes的插件,故安裝了kubernetes plugins,其他的可根據(jù)自行項目確定下載、安裝。
第二步:點擊系統(tǒng)管理--->系統(tǒng)設(shè)置
添加jenkins的地址以及郵件地址
第三步:拉動滾動框到最下面,新增一個云
這里我加了kubernetes的配置,為什么后面會講。
第四步:新建任務(wù)
在觸發(fā)器中新增規(guī)則,最下面要生成token。
第五步:
接下來就是選擇與gitlab互動,gitlab的地址以及憑據(jù),憑據(jù)可通過首頁加上可訪問gitlab的用戶信息,腳本路徑需要根據(jù)自身的Jenkinsfile路徑情況填寫。
第六步:
如果啟用全局安全,這個端口本身是50000,但由于k8s的默認nodePort范圍是30000-32767,故可以修改在這區(qū)間內(nèi),比如:30000,這也是為什么上面創(chuàng)建時service的nodePort是30000了。
至此,jenkins環(huán)境配置完成
第七步:配置gitlab
這里的url就是在新建任務(wù)時生成的Gitlab webhook,token就是上面截圖生成的token,最后add webhook。
第八步:
關(guān)于Harbor,自己可以簡單搭建一個harbor服務(wù),找度娘問一下很多,此處略。
第九步:
新建Jenkinsfile文件,如果剛才的路徑是在項目根目錄,則直接在項目根目錄下創(chuàng)建Jenkinsfile文件
def label = "mypod-${UUID.randomUUID().toString()}"
def k8sPodYaml = """
apiVersion: "v1"
kind: "Pod"
metadata:
labels:
jenkins: "slave"
name: "${label}"
spec:
containers:
- env:
- name: "CI_ENV"
value: "YES"
- name: "JENKINS_AGENT_WORKDIR"
value: "/home/jenkins/agent"
image: "jenkins/jnlp-slave"
imagePullPolicy: "Always"
name: "jnlp"
resources:
limits: {}
requests: {}
securityContext:
privileged: false
tty: false
volumeMounts:
- mountPath: "/home/jenkins/.kube"
name: "volume-2"
readOnly: false
- mountPath: "/var/run/docker.sock"
name: "volume-0"
readOnly: false
- mountPath: "/var/inference/config"
name: "volume-1"
readOnly: false
- mountPath: "/usr/local/bin/kubectl"
name: "volume-3"
readOnly: false
- mountPath: "/home/jenkins/agent"
name: "workspace-volume"
readOnly: false
workingDir: "/home/jenkins/agent"
nodeSelector: {}
restartPolicy: "Never"
volumes:
- hostPath:
path: "/var/run/docker.sock"
name: "volume-0"
- hostPath:
path: "/home/leinao/.kube"
name: "volume-2"
- hostPath:
path: "/home/leinao/inference-deploy/output_config"
name: "volume-1"
- emptyDir: {}
name: "workspace-volume"
- hostPath:
path: "/usr/local/bin/kubectl"
name: "volume-3"
"""
****************
下面是自己的任務(wù)構(gòu)建項目時的邏輯,由于我們這塊用了自己的框架寫的編譯邏輯,故比較簡單的,這里不合適公開,但是邏輯都差不多,大家可自行編寫。
這塊解釋上面的k8s的yaml,這個就是為了在k8s中啟動一個pod,通過該pod來執(zhí)行構(gòu)建邏輯的過程。
到此,關(guān)于Jenkins結(jié)合harbor、gitlab、k8s來實現(xiàn)CI/CD結(jié)束了,有幾點注意的地方:
1. 如果jenkins是在容器中啟動的一定要記得將這個端口(30000)暴露到外部,不然jenkins-master會不知道slave是否已經(jīng)啟動,會反復(fù)去創(chuàng)建pod直到超過重試次數(shù)。
2. 如果提示Jenkins doesn’t have label jenkins-jnlp-slave,可能原因:
1). 因為slave節(jié)點無法鏈接到j(luò)enkins節(jié)點開放端口50000導(dǎo)致
2). 因為slave鏡像中slave啟動失敗導(dǎo)致的
3). 因為jenkins和k8s通信有延時導(dǎo)致超時jenkins會反復(fù)創(chuàng)建pod
4). 因為slave pod啟動失敗
5). 因為pipeline中指定的label與配置中的不一致導(dǎo)致
3. 也可以通過Ingress暴露的方式來進行暴露。
關(guān)于“微服務(wù)如何自動化部署CI/CD”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。