91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微服務如何自動化部署CI/CD

發布時間:2021-11-18 09:49:30 來源:億速云 閱讀:317 作者:小新 欄目:大數據

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


環境:
    ubuntu16.04
    docker18.04
    k8s1.13.x +

1. 準備
以上系統環境準備好,本文講述的是用k8s來進行部署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


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

微服務如何自動化部署CI/CD

同時會看到一個service生成,映射端口到外部  

微服務如何自動化部署CI/CD

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

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

安裝完插件后,進入下一步,創建第一個賬戶,管理員賬戶,一般建議創建,方便后面使用,注:郵箱也需要填寫。

完成以上后,我們進入正式界面:

微服務如何自動化部署CI/CD

第一步:點擊系統管理--->插件管理,添加一些插件,這里有用到kubernetes的插件,故安裝了kubernetes plugins,其他的可根據自行項目確定下載、安裝。


第二步:點擊系統管理--->系統設置

微服務如何自動化部署CI/CD

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

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

微服務如何自動化部署CI/CD

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

第四步:新建任務

微服務如何自動化部署CI/CD

在觸發器中新增規則,最下面要生成token。

第五步:

微服務如何自動化部署CI/CD

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

第六步:

微服務如何自動化部署CI/CD

如果啟用全局安全,這個端口本身是50000,但由于k8s的默認nodePort范圍是30000-32767,故可以修改在這區間內,比如:30000,這也是為什么上面創建時service的nodePort是30000了。

至此,jenkins環境配置完成

第七步:配置gitlab

微服務如何自動化部署CI/CD

這里的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”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泰州市| 烟台市| 定远县| 双桥区| 湟源县| 隆尧县| 乳源| 延长县| 汝南县| 阿巴嘎旗| 临夏市| 平度市| 于田县| 濮阳县| 谢通门县| 南丰县| 康马县| 巍山| 锡林浩特市| 舒兰市| 忻城县| 高碑店市| 揭东县| 临夏县| 西宁市| 来凤县| 廉江市| 桐柏县| 汝南县| 沂源县| 瓦房店市| 盐城市| 东乌珠穆沁旗| 大方县| 广饶县| 武清区| 康马县| 老河口市| 泊头市| 广安市| 光山县|