中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何基于開源組件使用CI/CD

發布時間:2022-01-10 17:08:55 來源:億速云 閱讀:149 作者:柒染 欄目:云計算

本篇文章給大家分享的是有關如何基于開源組件使用CI/CD,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

前言

應對敏捷開發的需求,對CI(持續集成))/CD(持續交付)的提出了更高的標準,今天來討論下,如何基于開源組件(gitlab/jenkins/harbor/kubernetes)使用CI/CD,賦能團隊的開發、運維。

核心組件

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

基本流程

  1. 在GitLab創建對應的項目。

  2. 開發者將代碼提交到GitLab。

  3. Jenkins創建對應的任務(Job),集成該項目的Git地址和Kubernetes集群。

  4. 如有配置鉤子,推送(Push)代碼會自動觸發Jenkins構建,如沒有配置鉤子,需要手動構建。

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

  6. Jenkins Slave根據流水線(Pipeline)定義的步驟執行構建。

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

    2. 通過Dockerfile生成鏡像。

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

    4. Jenkins再次控制Kubernetes進行最新的鏡像部署。

:

  • 上面所述為一般步驟,中間還可能會涉及自動化測試等步驟,可自行根據業務場景添加。

  • 上面流水線步驟一般由應用代碼庫的根目錄下Jenkinsfile決定,Jenkins會自動讀取該文件;另外如果需要對具體的應用流水線實施強管控,可以獨立管理jenkinsfile模板,然后根據jenkins API接口即時生成流水線。

  • 默認使用的Dockerfile放置在代碼倉庫的根目錄下。

組件部署

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

  2. gitlab 無忌過招:手把手教你搭建自己的GitLab庫

  3. harbor 安裝配置指南

  4. jenkins

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

Jenkins 部署及配置

說明:

  • 以下的yaml文件均在 k8s master節點的 /home/jenkins_deploy目錄下,

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

    • nodeName ipaddress , ipaddress 請確認其為一個有效的ip.

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

    • 因使用的jenkins-master 的基礎鏡像來自公網,需要k8s maste 節點也要可以訪問公網,或者你可以將 jenkins/jenkins:lts-alpine 推送至自己的內網鏡像倉庫。

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

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

1. 準備部署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
  • 授權jenkins對k8s的訪問 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
  • 為了便于辦公網(集群外)訪問,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. 應用yaml,部署jenkins

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

3. 確認jenkins 服務狀態

[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. 訪問jenkins 安裝插件、設置

注: 步驟1 聲明的域名 jenkins.dev.hanker.net 已經解析至ingress,故可直接訪問; 如果你也想通過自定義域名訪問jenkins,麻請解析至正確的ingress服務節點,即可。

  1. 確認你也已經安裝了kubernetes/ kubernetes cli 插件

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

你應該可以通過類似的指令獲取jenkins-master的密碼

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

如何基于開源組件使用CI/CD

  1. 配置Kubernetes 插件

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

如何基于開源組件使用CI/CD

如何基于開源組件使用CI/CD

圖中標注:

  1. 請修改為你所在環境對應的k8s master

  2. 聲明jenkins-agent 的命令空間,也可以根據需要調整;

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

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

  5. 配置Kubernetes Pod Template

如何基于開源組件使用CI/CD

圖中標注:

  1. 設置基礎的jenkins-agent鏡像;

  2. 指定工作目錄;

    • 如果你需要下載、導出或是緩存構建的話,指定一個為共享存儲的目錄就很有意義了。

  3. 設置目錄掛載

    • 如步驟2如說,你可以將宿主機的目錄或是網絡存儲掛載至jenkins-agent.

以上就是如何基于開源組件使用CI/CD,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

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

ci cd
AI

崇州市| 从江县| 洛宁县| 商都县| 杨浦区| 石景山区| 武清区| 乳山市| 辽中县| 景东| 洪江市| 濮阳市| 祁阳县| 响水县| 天等县| 吴堡县| 灵武市| 乌鲁木齐市| 和政县| 宽甸| 龙胜| 吴忠市| 大渡口区| 陵水| 禄丰县| 即墨市| 文安县| 通海县| 沂南县| 呼伦贝尔市| 富裕县| 南陵县| 娄烦县| 上杭县| 云龙县| 呼伦贝尔市| 景泰县| 德昌县| 秭归县| 车险| 德令哈市|