真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

微服務(wù)如何自動化部署CI/CD

這篇文章將為大家詳細(xì)講解有關(guān)微服務(wù)如何自動化部署CI/CD,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供玉樹網(wǎng)站建設(shè)、玉樹做網(wǎng)站、玉樹網(wǎng)站設(shè)計(jì)、玉樹網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、玉樹企業(yè)網(wǎng)站模板建站服務(wù),10年玉樹做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

環(huán)境:
    ubuntu16.04
    docker18.04
    k8s1.13.x +

1. 準(zhǔn)備
以上系統(tǒng)環(huán)境準(zhǔn)備好,本文講述的是用k8s來進(jìn)行部署jenkins

2. 部署jenkins

新建部署腳本jenkins.yaml:

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


執(zhí)行腳本:
kubectl apply -f jenkins.yaml
kubectl get pod 會看到部署成功的pod

微服務(wù)如何自動化部署CI/CD

同時(shí)會看到一個(gè)service生成,映射端口到外部  

微服務(wù)如何自動化部署CI/CD

接下來通過頁面訪問該服務(wù),首次打開后,會讓輸入一個(gè)admin的密鑰,這一串字符可以在日志中找到,執(zhí)行kubectl logs -f test-jenkins-c6bd58bf9-tgmsa即可,輸入一串字符后,進(jìn)入下一步,需要安裝一些插件,在安裝插件的時(shí)候,需要注意的是,選擇jenkins的image不同,其所需安裝的插件也是不一樣的,有的可能image已經(jīng)存在了。

具體請看:https://jenkins.io/zh/doc/book/installing/

安裝完插件后,進(jìn)入下一步,創(chuàng)建第一個(gè)賬戶,管理員賬戶,一般建議創(chuàng)建,方便后面使用,注:郵箱也需要填寫。

完成以上后,我們進(jìn)入正式界面:

微服務(wù)如何自動化部署CI/CD

第一步:點(diǎn)擊系統(tǒng)管理--->插件管理,添加一些插件,這里有用到kubernetes的插件,故安裝了kubernetes plugins,其他的可根據(jù)自行項(xiàng)目確定下載、安裝。


第二步:點(diǎn)擊系統(tǒng)管理--->系統(tǒng)設(shè)置

微服務(wù)如何自動化部署CI/CD

添加jenkins的地址以及郵件地址

第三步:拉動滾動框到最下面,新增一個(gè)云

微服務(wù)如何自動化部署CI/CD

這里我加了kubernetes的配置,為什么后面會講。

第四步:新建任務(wù)

微服務(wù)如何自動化部署CI/CD

在觸發(fā)器中新增規(guī)則,最下面要生成token。

第五步:

微服務(wù)如何自動化部署CI/CD

接下來就是選擇與gitlab互動,gitlab的地址以及憑據(jù),憑據(jù)可通過首頁加上可訪問gitlab的用戶信息,腳本路徑需要根據(jù)自身的Jenkinsfile路徑情況填寫。

第六步:

微服務(wù)如何自動化部署CI/CD

如果啟用全局安全,這個(gè)端口本身是50000,但由于k8s的默認(rèn)nodePort范圍是30000-32767,故可以修改在這區(qū)間內(nèi),比如:30000,這也是為什么上面創(chuàng)建時(shí)service的nodePort是30000了。

至此,jenkins環(huán)境配置完成

第七步:配置gitlab

微服務(wù)如何自動化部署CI/CD

這里的url就是在新建任務(wù)時(shí)生成的Gitlab webhook,token就是上面截圖生成的token,最后add webhook。

第八步:

關(guān)于Harbor,自己可以簡單搭建一個(gè)harbor服務(wù),找度娘問一下很多,此處略。

第九步:

新建Jenkinsfile文件,如果剛才的路徑是在項(xiàng)目根目錄,則直接在項(xiàng)目根目錄下創(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)建項(xiàng)目時(shí)的邏輯,由于我們這塊用了自己的框架寫的編譯邏輯,故比較簡單的,這里不合適公開,但是邏輯都差不多,大家可自行編寫。

這塊解釋上面的k8s的yaml,這個(gè)就是為了在k8s中啟動一個(gè)pod,通過該pod來執(zhí)行構(gòu)建邏輯的過程。

到此,關(guān)于Jenkins結(jié)合harbor、gitlab、k8s來實(shí)現(xiàn)CI/CD結(jié)束了,有幾點(diǎn)注意的地方:

    1. 如果jenkins是在容器中啟動的一定要記得將這個(gè)端口(30000)暴露到外部,不然jenkins-master會不知道slave是否已經(jīng)啟動,會反復(fù)去創(chuàng)建pod直到超過重試次數(shù)。

    2. 如果提示Jenkins doesn’t have label jenkins-jnlp-slave,可能原因:

        1). 因?yàn)閟lave節(jié)點(diǎn)無法鏈接到j(luò)enkins節(jié)點(diǎn)開放端口50000導(dǎo)致

        2). 因?yàn)閟lave鏡像中slave啟動失敗導(dǎo)致的

        3). 因?yàn)閖enkins和k8s通信有延時(shí)導(dǎo)致超時(shí)jenkins會反復(fù)創(chuàng)建pod

        4). 因?yàn)閟lave pod啟動失敗

        5). 因?yàn)閜ipeline中指定的label與配置中的不一致導(dǎo)致

    3. 也可以通過Ingress暴露的方式來進(jìn)行暴露。

關(guān)于“微服務(wù)如何自動化部署CI/CD”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。


當(dāng)前題目:微服務(wù)如何自動化部署CI/CD
當(dāng)前URL:http://weahome.cn/article/gesdpp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部