您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何基于開源組件使用CI/CD,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
應對敏捷開發的需求,對CI(持續集成))/CD(持續交付)的提出了更高的標準,今天來討論下,如何基于開源組件(gitlab/jenkins/harbor/kubernetes)使用CI/CD,賦能團隊的開發、運維。
組件名稱 | 版本 | 備注 |
---|---|---|
kubernetes | v1.15.3 | 10.0.0.182:6443 |
jenkins | 2.176.2 | 集群內部署/ namespace: devops |
gitlab | 11.8 | 主機部署 |
harbor | v1.7.4 | docker-compose部署 |
在GitLab創建對應的項目。
開發者將代碼提交到GitLab。
Jenkins創建對應的任務(Job),集成該項目的Git地址和Kubernetes集群。
如有配置鉤子,推送(Push)代碼會自動觸發Jenkins構建,如沒有配置鉤子,需要手動構建。
Jenkins控制Kubernetes(使用的是Kubernetes插件)創建Jenkins Slave。
Jenkins Slave根據流水線(Pipeline)定義的步驟執行構建。
檢出代碼、打包、編譯。
通過Dockerfile生成鏡像。
將鏡像提送(Push)到私有Harbor。
Jenkins再次控制Kubernetes進行最新的鏡像部署。
注:
上面所述為一般步驟,中間還可能會涉及自動化測試等步驟,可自行根據業務場景添加。
上面流水線步驟一般由應用代碼庫的根目錄下Jenkinsfile決定,Jenkins會自動讀取該文件;另外如果需要對具體的應用流水線實施強管控,可以獨立管理jenkinsfile模板,然后根據jenkins API接口即時生成流水線。
默認使用的Dockerfile放置在代碼倉庫的根目錄下。
kubernetes 第3篇 Kubernetes集群安裝部署
gitlab 無忌過招:手把手教你搭建自己的GitLab庫
harbor 安裝配置指南
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了。
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: /
$ pwd $ /home/jenkins_deploy $ kubectl apply -f *.yaml
[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]#
注: 步驟1 聲明的域名 jenkins.dev.hanker.net
已經解析至ingress,故可直接訪問; 如果你也想通過自定義域名訪問jenkins,麻請解析至正確的ingress服務節點,即可。
確認你也已經安裝了kubernetes/ kubernetes cli 插件
操作指引: 【Manage Jenkins】 -> 【Manage Plugins】
你應該可以通過類似的指令獲取jenkins-master的密碼
$ kubectl -n devops exec jenkins-pod-name cat /var/jenkins_home/secrets/initialAdminPassword
配置Kubernetes 插件
操作指引: 【Manage Jenkins】->【Configure System】
圖中標注:
請修改為你所在環境對應的k8s master
聲明jenkins-agent 的命令空間,也可以根據需要調整;
jenkins-master的訪問地址,本示例使用的是 service-name的形式訪問。
測試與k8s分享群的連接情況。如果你獲取到『
Connection test successful』,恭喜你可以繼續。
配置Kubernetes Pod Template
圖中標注:
設置基礎的jenkins-agent鏡像;
指定工作目錄;
如果你需要下載、導出或是緩存構建的話,指定一個為共享存儲的目錄就很有意義了。
設置目錄掛載
如步驟2如說,你可以將宿主機的目錄或是網絡存儲掛載至jenkins-agent.
以上就是如何基于開源組件使用CI/CD,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。