如何基于開(kāi)源組件使用CI/CD

本篇文章給大家分享的是有關(guān)如何基于開(kāi)源組件使用CI/CD,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供介休企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為介休眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

前言

應(yīng)對(duì)敏捷開(kāi)發(fā)的需求,對(duì)CI(持續(xù)集成))/CD(持續(xù)交付)的提出了更高的標(biāo)準(zhǔn),今天來(lái)討論下,如何基于開(kāi)源組件(gitlab/jenkins/harbor/kubernetes)使用CI/CD,賦能團(tuán)隊(duì)的開(kāi)發(fā)、運(yùn)維。

核心組件

組件名稱版本備注
kubernetesv1.15.310.0.0.182:6443
jenkins2.176.2集群內(nèi)部署/ namespace: devops
gitlab11.8主機(jī)部署
harborv1.7.4docker-compose部署

基本流程

  1. 在GitLab創(chuàng)建對(duì)應(yīng)的項(xiàng)目。

  2. 開(kāi)發(fā)者將代碼提交到GitLab。

  3. Jenkins創(chuàng)建對(duì)應(yīng)的任務(wù)(Job),集成該項(xiàng)目的Git地址和Kubernetes集群。

  4. 如有配置鉤子,推送(Push)代碼會(huì)自動(dòng)觸發(fā)Jenkins構(gòu)建,如沒(méi)有配置鉤子,需要手動(dòng)構(gòu)建。

  5. Jenkins控制Kubernetes(使用的是Kubernetes插件)創(chuàng)建Jenkins Slave。

  6. Jenkins Slave根據(jù)流水線(Pipeline)定義的步驟執(zhí)行構(gòu)建。

    1. 檢出代碼、打包、編譯。

    2. 通過(guò)Dockerfile生成鏡像。

    3. 將鏡像提送(Push)到私有Harbor。

    4. Jenkins再次控制Kubernetes進(jìn)行最新的鏡像部署。

:

  • 上面所述為一般步驟,中間還可能會(huì)涉及自動(dòng)化測(cè)試等步驟,可自行根據(jù)業(yè)務(wù)場(chǎng)景添加。

  • 上面流水線步驟一般由應(yīng)用代碼庫(kù)的根目錄下Jenkinsfile決定,Jenkins會(huì)自動(dòng)讀取該文件;另外如果需要對(duì)具體的應(yīng)用流水線實(shí)施強(qiáng)管控,可以獨(dú)立管理jenkinsfile模板,然后根據(jù)jenkins API接口即時(shí)生成流水線。

  • 默認(rèn)使用的Dockerfile放置在代碼倉(cāng)庫(kù)的根目錄下。

組件部署

  1. kubernetes 第3篇 Kubernetes集群安裝部署

  2. gitlab 無(wú)忌過(guò)招:手把手教你搭建自己的GitLab庫(kù)

  3. harbor 安裝配置指南

  4. jenkins

: 本文主要說(shuō)明下jenkins的部署及配置,其他組件如果你部署有問(wèn)題,歡迎留言。

Jenkins 部署及配置

說(shuō)明:

  • 以下的yaml文件均在 k8s master節(jié)點(diǎn)的 /home/jenkins_deploy目錄下,

  • 部署示例的depployment.yaml 的注解

    • nodeName ipaddress , ipaddress 請(qǐng)確認(rèn)其為一個(gè)有效的ip.

    • 示例中jenkins的目錄 /var/jenkins_home 是直接掛載到host_path, 如果你有條件,建議替換為共享存儲(chǔ)。

    • 因使用的jenkins-master 的基礎(chǔ)鏡像來(lái)自公網(wǎng),需要k8s maste 節(jié)點(diǎn)也要可以訪問(wèn)公網(wǎng),或者你可以將 jenkins/jenkins:lts-alpine 推送至自己的內(nèi)網(wǎng)鏡像倉(cāng)庫(kù)。

  • 部署示例的ingress.yaml 的注解

    • 需要你也需要辦公網(wǎng)(集群外)訪問(wèn),請(qǐng)將jenkins.dev.hanker.net, 改為有效的域名地址,或是你也可以通過(guò)NodePort的形式聲明 service,就可以直接通過(guò)ip:port的形式訪問(wèn)jenkins了。

1. 準(zhǔn)備部署yaml

  • deployment.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: devops

# Deployment 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jenkins
  namespace: devops
spec:
  replicas: 1
  revisionHistoryLimit: 3
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      nodeName: 1.1.1.1
      serviceAccountName: jenkins-admin
      containers:
      - image: jenkins/jenkins:lts-alpine
        imagePullPolicy: IfNotPresent
        name: jenkins
        volumeMounts:
        - name: jenkins-volume
          mountPath: /var/jenkins_home
        - name: jenkins-localtime
          mountPath: /etc/localtime
        env:
          - name: JAVA_OPTS
            value: '-Xms256m -Xmx1024m -Duser.timezone=Asia/Shanghai'
          - name: TRY_UPGRADE_IF_NO_MARKER
            value: 'true'
        ports:
        - name: http
          containerPort: 8080
        - name: agent
          containerPort: 50000
        resources:
          requests:
            cpu: 1000m
            memory: 1Gi
          limits:
            cpu: 1200m
            memory: 2Gi
      volumes:
        - name: jenkins-localtime
          hostPath:
            path: /etc/localtime
        - name: jenkins-volume
          hostPath:
            path: /home/jenkins/jenkins_home
  • 配置service, services.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: jenkins-service
  namespace: devops
spec:
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 8080
  - port: 50000
    targetPort: 50000
    name: agent
  selector:
    app: jenkins
  • 授權(quán)jenkins對(duì)k8s的訪問(wèn) rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: jenkins
  name: jenkins-admin
  namespace: devops

---

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: jenkins-rbac
  namespace: devops
rules:
  - apiGroups: ["","extensions","app"]
    resources: ["pods","pods/exec","deployments","replicasets"]
    verbs: ["get","list","watch","create","update","patch","delete"]

---

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: jenkins-admin
  namespace: devops
  labels:
    k8s-app: jenkins
subjects:
  - kind: ServiceAccount
    name: jenkins-admin
    namespace: devops
roleRef:
  kind: ClusterRole
  name: jenkins-rbac
  apiGroup: rbac.authorization.k8s.io
  • 為了便于辦公網(wǎng)(集群外)訪問(wèn),ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: jenkins-ingress
  namespace: devops
spec:
  rules:
  - host: jenkins.dev.hanker.net
    http:
      paths:
      - backend:
          serviceName: jenkins-service
          servicePort: 8080
        path: /

2. 應(yīng)用yaml,部署jenkins

$ pwd
$ /home/jenkins_deploy
$ kubectl apply -f *.yaml

3. 確認(rèn)jenkins 服務(wù)狀態(tài)

[root@node0 jenkins_deploy]# kubectl -n devops get deployment jenkins
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
jenkins   1/1     1            1           51d
[root@node0 jenkins_deploy]#

4. 訪問(wèn)jenkins 安裝插件、設(shè)置

注: 步驟1 聲明的域名 jenkins.dev.hanker.net 已經(jīng)解析至ingress,故可直接訪問(wèn); 如果你也想通過(guò)自定義域名訪問(wèn)jenkins,麻請(qǐng)解析至正確的ingress服務(wù)節(jié)點(diǎn),即可。

  1. 確認(rèn)你也已經(jīng)安裝了kubernetes/ kubernetes cli 插件

操作指引: 【Manage Jenkins】 -> 【Manage Plugins】

你應(yīng)該可以通過(guò)類似的指令獲取jenkins-master的密碼

$ kubectl -n devops exec jenkins-pod-name cat /var/jenkins_home/secrets/initialAdminPassword

如何基于開(kāi)源組件使用CI/CD

  1. 配置Kubernetes 插件

操作指引: 【Manage Jenkins】->【Configure System】

如何基于開(kāi)源組件使用CI/CD

如何基于開(kāi)源組件使用CI/CD

圖中標(biāo)注:

  1. 請(qǐng)修改為你所在環(huán)境對(duì)應(yīng)的k8s master

  2. 聲明jenkins-agent 的命令空間,也可以根據(jù)需要調(diào)整;

  3. jenkins-master的訪問(wèn)地址,本示例使用的是 service-name的形式訪問(wèn)。

  4. 測(cè)試與k8s分享群的連接情況。如果你獲取到『
    Connection test successful』,恭喜你可以繼續(xù)。

  5. 配置Kubernetes Pod Template

如何基于開(kāi)源組件使用CI/CD

圖中標(biāo)注:

  1. 設(shè)置基礎(chǔ)的jenkins-agent鏡像;

  2. 指定工作目錄;

    • 如果你需要下載、導(dǎo)出或是緩存構(gòu)建的話,指定一個(gè)為共享存儲(chǔ)的目錄就很有意義了。

  3. 設(shè)置目錄掛載

    • 如步驟2如說(shuō),你可以將宿主機(jī)的目錄或是網(wǎng)絡(luò)存儲(chǔ)掛載至jenkins-agent.

以上就是如何基于開(kāi)源組件使用CI/CD,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站標(biāo)題:如何基于開(kāi)源組件使用CI/CD
轉(zhuǎn)載來(lái)源:http://muchs.cn/article24/pdheje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、域名注冊(cè)靜態(tài)網(wǎng)站、全網(wǎng)營(yíng)銷推廣網(wǎng)站設(shè)計(jì)、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名