国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Jenkins 使用 Kubernetes Plugin 完成持續構建與發布

icyfire / 2376人閱讀

摘要:所有需要跑任務的通過模版動態創建,當任務執行結束自動刪除。同時也可以用配置完畢,可以點擊按鈕測試是否能夠連接的到,如果顯示則表示連接成功,配置沒有問題。

介紹

基于Kubernetes和Jenkins來實現CI/CD。 所有需要跑任務的jenkins slave(pod)通過模版動態創建,當任務執行結束自動刪除。

系統整體架構

job流程

環境

kubernets

jenkins配置
jenkins-deployment.yaml
apiVersion: "apps/v1beta1"
kind: "Deployment"
metadata:
  name: "jenkins"
  labels:
    name: "jenkins"
spec:
  replicas: 1
  template:
    metadata:
      name: "jenkins"
      labels:
        name: "jenkins"
    spec:
      containers:
        - name: jenkins
          image: jenkinsci/jenkins:2.154
          imagePullPolicy: IfNotPresent
          volumeMounts:
          - name: jenkins-home
            mountPath: /var/jenkins_home
          env:
            - name: TZ
              value: Asia/Shanghai
          ports:
          - containerPort: 8080 
            name: web
          - containerPort: 50000
            name: agent
      volumes:
        - name: jenkins-home
          nfs:
            path: "/nfs/jenkins/data"
            server: "cpu029.hogpu.cc"
      terminationGracePeriodSeconds: 10
      serviceAccountName: jenkins
jenkins-account.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: 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: [""]
  resources: ["configmap"]
  verbs: ["get"]

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
  name: jenkins
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: jenkins
subjects:
- kind: ServiceAccount
  name: jenkins
jenkins-service.yaml
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: jenkins
  name: jenkins
spec:
  type: NodePort
  ports:
    - port: 8080
      name: web
      targetPort: 8080
    - port: 50000
      name: agent
      targetPort: 50000
  selector:
    name: jenkins
說明

說明一下:這里 Service 我們暴漏了端口 8080 和 50000,8080 為訪問 Jenkins Server 頁面端口,50000 為創建的 Jenkins Slave 與 Master 建立連接進行通信的默認端口,如果不暴露的話,Slave 無法跟 Master 建立連接。這里使用 NodePort 方式暴漏端口,并未指定其端口號,由 Kubernetes 系統默認分配,當然也可以指定不重復的端口號(范圍在 30000~32767)

創建jenkins
接下來,通過 kubectl 命令行執行創建 Jenkins Service。

$ kubectl create namespace kubernetes-plugin
$ kubectl config set-context $(kubectl config current-context) --namespace=kubernetes-plugin
$ kubectl create -f jenkins-deployment.yaml
$ kubectl create -f jenkins-account.yaml
$ kubectl create -f jenkins-service.yaml

ps:

創建一個新的 namespace 為 kubernetes-plugin,并且將當前 context 設置為 kubernetes-plugin namespace 這樣就會自動切換到該空間下。
查看狀態
jianyu.tian@yz-gpu-k8s004 ~]$ kubectl get deployment,svc,pods
NAME             DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/jenkins   1         1         1            1           1h

NAME          TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                          AGE
svc/jenkins   NodePort   10.106.235.91           8080:31051/TCP,50000:30545/TCP   2h

NAME                          READY     STATUS    RESTARTS   AGE
po/jenkins-64564fc5c9-pzlpb   1/1       Running   0          1h

ps:

Jenkins Master 服務已經啟動起來了,并且將端口暴漏到 8080:31051,50000:30545,此時可以通過瀏覽器打開 http://:30645 訪問 Jenkins 頁面了。
jenkins web界面初始化

1.主要對jenkins-plugin插件做說明

安裝完畢后,點擊 “系統管理” —> “系統設置” —> “新增一個云” —> 選擇 “Kubernetes”,然后填寫 Kubernetes 和 Jenkins 配置信息。

ps:
Name 處默認為 kubernetes,也可以修改為其他名稱,如果這里修改了,下邊在執行 Job 時指定 podTemplate() 參數 cloud 為其對應名稱,否則會找不到,cloud 默認值取:kubernetes
Kubernetes URL 處我填寫了 https://kubernetes.default.sv... 這里我填寫了 Kubernetes Service 對應的 DNS 記錄,通過該 DNS 記錄可以解析成該 Service 的 Cluster IP,或者直接填寫外部 Kubernetes 的地址 https://:。
Jenkins URL 處我填寫了 http://jenkins.kubernetes-plugin:8080,跟上邊類似,也是使用 Jenkins Service 對應的 DNS 記錄,不過要指定為 8080 端口,因為我們設置暴漏 8080 端口。同時也可以用 http://:

配置完畢,可以點擊 “Test Connection” 按鈕測試是否能夠連接的到 Kubernetes,如果顯示 Connection test successful 則表示連接成功,配置沒有問題。

測試

創建一個 Pipeline 類型 Job:

pipeline {
    agent any
  //并行操作
    stages {
        stage("test_all") {
            parallel {
                stage("python3-cuda9.2") {
                    agent {
                        kubernetes {
                            label "mxnet-python3-cuda9"
                            yaml """
apiVersion: "v1"
kind: "Pod"
metadata:
  labels:
    name: "mxnet-python3-cuda9"
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: hobot.workas
            operator: In
            values:
            - gpu
          - key: kubernetes.io/nvidia-gpu-name
            operator: In
            values:
            - TITAN_V
  containers:
  - name: mxnetone
    image: docker.hobot.cc/dlp/mxnetci:runtime-py3.6-cudnn7.3-cuda9.2-centos7
    imagePullPolicy: Always
    resources:
      limits:
        nvidia.com/gpu: 1
"""
                }
            }
                   stages {
                        stage("拉取代碼") {
                            steps {
                                container("mxnetone") {
                                    checkout(
                                        [
                                            $class: "GitSCM", 
                                            branches: [[name: "nnvm"]], 
                                            browser: [$class: "Phabricator", repo: "rMXNET", repoUrl: ""], 
                                            doGenerateSubmoduleConfigurations: false, extensions: [[$class: "SubmoduleOption", disableSubmodules: false, parentCredentials: true, recursiveSubmodules: true, reference: "", trackingSubmodules: false]],
                                            submoduleCfg: [],
                                            userRemoteConfigs: [[credentialsId: "zhaoming_private", url: ""]]
                                        ]
                                    )                   
                                }
                            }
                        }
                        stage("編譯") {
                            steps {
                                container("mxnetone") {
                                    sh """
                                    nvidia-smi
                                    source /root/.bashrc
                                    make deps
                                    echo -e "USE_PROFILER=1
USE_GLOG=0
USE_HDFS=0" >> ./make/config.mk
                                    sed -i "s#USE_CUDA_PATH = /usr/local/cuda-8.0#USE_CUDA_PATH = /usr/local/cuda-9.2#g" ./make/config.mk
                                    make lint
                                    make -j 12
                                    ln -s /home/data ./
                                    make test |  tee unittest.log
                                    """
                                }
                            }
                        }
                        stage("單元測試") {
                            steps {
                              container("mxnetone") {
                                    sh """
                                    cp -rf python/mxnet ./
                                    cp -f lib/libmxnet.so mxnet/
                                    echo "-------Running tests under Python3-------"
                                    python3 -V
                                    python3 `which nosetests` tests/python/train
                                    python3 `which nosetests` -v -d tests/python/unittest
                                       """
                                }
                            }
                        }
                    }
                }

                stage("python2-cuda9.2") {
                    agent {
                        kubernetes {
                            label "mxnet-python2-cuda9"
                            yaml """
apiVersion: "v1"
kind: "Pod"
metadata:
  labels:
    name: "mxnet-python2-cuda9"
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: hobot.workas
            operator: In
            values:
            - gpu
          - key: kubernetes.io/nvidia-gpu-name
            operator: In
            values:
            - TITAN_V
  containers:
  - name: mxnettwo
    image: docker.hobot.cc/dlp/mxnetci:runtime-cudnn7.3-cuda9.2-centos7
    imagePullPolicy: Always
    resources:
      limits:
        nvidia.com/gpu: 1
"""
            }
        }
                     stages {
                        stage("拉取代碼") {
                            steps {
                                container("mxnettwo") {
                                    checkout(
                                        [
                                            $class: "GitSCM", 
                                            branches: [[name: "nnvm"]], 
                                            browser: [$class: "Phabricator", repo: "rMXNET", repoUrl: ""], 
                                            doGenerateSubmoduleConfigurations: false, extensions: [[$class: "SubmoduleOption", disableSubmodules: false, parentCredentials: true, recursiveSubmodules: true, reference: "", trackingSubmodules: false]],
                                            submoduleCfg: [],
                                            userRemoteConfigs: [[credentialsId: "zhaoming_private", url: ""]]
                                        ]
                                    )
                                }
                            }
                        }
                        stage("編譯") {
                            steps {
                                container("mxnettwo") {
                                    sh """
                                    nvidia-smi
                                    pip2 install numpy==1.14.3 -i https://mirrors.aliyun.com/pypi/simple/
                                    source /root/.bashrc
                                    make deps
                                    echo -e "USE_PROFILER=1
USE_GLOG=0
USE_HDFS=0" >> ./make/config.mk
                                    sed -i "s#USE_CUDA_PATH = /usr/local/cuda-8.0#USE_CUDA_PATH = /usr/local/cuda-9.2#g" ./make/config.mk
                                    make lint
                                    make -j 12
                                    ln -s /home/data ./
                                    make test |  tee unittest.log
                                    """
                                }
                            }
                        }
                        stage("單元測試") {
                            steps {
                              container("mxnettwo") {
                                    sh """
                                    cp -rf python/mxnet ./
                                    cp -f lib/libmxnet.so mxnet/
                                    echo "-------Running tests under Python2-------"
                                    python2 -V
                                    python2 `which nosetests` tests/python/train
                                    python2 `which nosetests` -v -d tests/python/unittest
                                       """
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

文檔

https://github.com/jenkinsci/...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27636.html

相關文章

  • Kubernetes持續集成:Jenkins關于java.nio.file.NoSuchFileEx

    摘要:嘗試運行腳本發生了的錯誤。錯誤信息接下來就是,天的調查,關于這個錯誤的能查到的資料幾乎沒有,也嘗試了很多方法,無果非常煎熬。問題解決了參考文檔初試使用完成持續構建與發布集群安全配置 背景 為了使用Kubernetes管理并自動化部署應用程序,領導糾結了幾個同事搭了一個Kubernetes集群環境。不過,為了減少復雜度,采用了非官方推薦的方式: API Server使用http方式 不...

    tomener 評論0 收藏0
  • Docker在開發、測試中的應用

    摘要:對測試的影響讓單元測試運行的更順暢單元測試驅動開發是一個很好的應用程序開發方式,單元測試往往也是和代碼一起被提交到代碼倉庫中。但是很多單元測試通常依賴于很多其他服務,而這些服務的標準化配置往往是一個難點,如數據庫的搭建防火墻的配置等。 傳統的軟件開發、測試、運維需要三個團隊在三個不同的環境中進行,而三個環境的不同引發了很多的問題。如:工作內容的重復;開發環境中可運行的程序在測試和運維環...

    mating 評論0 收藏0
  • 構建定制:唯品會 PaaS 基于 Kubernetes 的實踐

    摘要:基于年底或年初沒有推廣的現狀,唯品會部門目前已經做了兩年的時間。唯品會現狀唯品會目前線上有一千多個域,每個域之間相互的依賴比較復雜,每次的部署發布困難。這是唯品會的架構,主要包含持續集成和持續部署。 數人云上海&深圳兩地容器之Mesos/K8S/Swarm三國演義的嘉賓精彩實錄第三更來啦。唯品會是數人云Meetup的老朋友,去年曾做過RPC服務框架和Mesos容器化的分享。本次分享中,...

    JackJiang 評論0 收藏0
  • 容器環境下的持續集成最佳實踐:構建基于 Drone + GitFlow + K8s 的云原生語義化

    摘要:集成測試完成后,由運維同學從發起一個到分支,此時會會運行單元測試,構建鏡像,并發布到預發布環境測試人員在預發布環境下再次驗證功能,團隊做上線前的其他準備工作運維同學合并,將為本次發布的代碼及鏡像自動打上版本號并書寫,同時發布到生產環境。 云原生 (Cloud Native) 是伴隨的容器技術發展出現的的一個詞,最早出自 Pivotal 公司(即開發了 Spring 的公司)的一本技術小...

    asoren 評論0 收藏0
  • 容器環境下的持續集成最佳實踐:構建基于 Drone + GitFlow + K8s 的云原生語義化

    摘要:集成測試完成后,由運維同學從發起一個到分支,此時會會運行單元測試,構建鏡像,并發布到預發布環境測試人員在預發布環境下再次驗證功能,團隊做上線前的其他準備工作運維同學合并,將為本次發布的代碼及鏡像自動打上版本號并書寫,同時發布到生產環境。 云原生 (Cloud Native) 是伴隨的容器技術發展出現的的一個詞,最早出自 Pivotal 公司(即開發了 Spring 的公司)的一本技術小...

    DevTalking 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<