您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關微服務如何自動化部署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
接下來通過頁面訪問該服務,首次打開后,會讓輸入一個admin的密鑰,這一串字符可以在日志中找到,執行kubectl logs -f test-jenkins-c6bd58bf9-tgmsa即可,輸入一串字符后,進入下一步,需要安裝一些插件,在安裝插件的時候,需要注意的是,選擇jenkins的image不同,其所需安裝的插件也是不一樣的,有的可能image已經存在了。
具體請看:https://jenkins.io/zh/doc/book/installing/
安裝完插件后,進入下一步,創建第一個賬戶,管理員賬戶,一般建議創建,方便后面使用,注:郵箱也需要填寫。
完成以上后,我們進入正式界面:
第一步:點擊系統管理--->插件管理,添加一些插件,這里有用到kubernetes的插件,故安裝了kubernetes plugins,其他的可根據自行項目確定下載、安裝。
第二步:點擊系統管理--->系統設置
添加jenkins的地址以及郵件地址
第三步:拉動滾動框到最下面,新增一個云
這里我加了kubernetes的配置,為什么后面會講。
第四步:新建任務
在觸發器中新增規則,最下面要生成token。
第五步:
接下來就是選擇與gitlab互動,gitlab的地址以及憑據,憑據可通過首頁加上可訪問gitlab的用戶信息,腳本路徑需要根據自身的Jenkinsfile路徑情況填寫。
第六步:
如果啟用全局安全,這個端口本身是50000,但由于k8s的默認nodePort范圍是30000-32767,故可以修改在這區間內,比如:30000,這也是為什么上面創建時service的nodePort是30000了。
至此,jenkins環境配置完成
第七步:配置gitlab
這里的url就是在新建任務時生成的Gitlab webhook,token就是上面截圖生成的token,最后add webhook。
第八步:
關于Harbor,自己可以簡單搭建一個harbor服務,找度娘問一下很多,此處略。
第九步:
新建Jenkinsfile文件,如果剛才的路徑是在項目根目錄,則直接在項目根目錄下創建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"
"""
****************
下面是自己的任務構建項目時的邏輯,由于我們這塊用了自己的框架寫的編譯邏輯,故比較簡單的,這里不合適公開,但是邏輯都差不多,大家可自行編寫。
這塊解釋上面的k8s的yaml,這個就是為了在k8s中啟動一個pod,通過該pod來執行構建邏輯的過程。
到此,關于Jenkins結合harbor、gitlab、k8s來實現CI/CD結束了,有幾點注意的地方:
1. 如果jenkins是在容器中啟動的一定要記得將這個端口(30000)暴露到外部,不然jenkins-master會不知道slave是否已經啟動,會反復去創建pod直到超過重試次數。
2. 如果提示Jenkins doesn’t have label jenkins-jnlp-slave,可能原因:
1). 因為slave節點無法鏈接到jenkins節點開放端口50000導致
2). 因為slave鏡像中slave啟動失敗導致的
3). 因為jenkins和k8s通信有延時導致超時jenkins會反復創建pod
4). 因為slave pod啟動失敗
5). 因為pipeline中指定的label與配置中的不一致導致
3. 也可以通過Ingress暴露的方式來進行暴露。
關于“微服務如何自動化部署CI/CD”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。