久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

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

191次閱讀
沒有評論

共計 4397 個字符,預計需要花費 11 分鐘才能閱讀完成。

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

前言

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

核心組件組件名稱版本備注 kubernetesv1.15.310.0.0.182:6443jenkins2.176.2 集群內(nèi)部署 / namespace: devopsgitlab11.8 主機部署 harborv1.7.4docker-compose 部署基本流程

在 GitLab 創(chuàng)建對應的項目。

開發(fā)者將代碼提交到 GitLab。

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

如有配置鉤子,推送(Push)代碼會自動觸發(fā) Jenkins 構(gòu)建,如沒有配置鉤子,需要手動構(gòu)建。

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

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

檢出代碼、打包、編譯。

通過 Dockerfile 生成鏡像。

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

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

注:

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

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

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

組件部署

kubernetes 第 3 篇 Kubernetes 集群安裝部署

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

harbor 安裝配置指南

jenkins

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

Jenkins 部署及配置

說明:

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

部署示例的 depployment.yaml 的注解

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

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

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

部署示例的 ingress.yaml 的注解

需要你也需要辦公網(wǎng)(集群外)訪問,請將 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

授權(quán) 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

為了便于辦公網(wǎng)(集群外)訪問,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 服務狀態(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. 訪問 jenkins 安裝插件、設置

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

確認你也已經(jīng)安裝了 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】

圖中標注:

請修改為你所在環(huán)境對應的 k8s master

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

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

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

配置 Kubernetes Pod Template

圖中標注:

設置基礎(chǔ)的 jenkins-agent 鏡像;

指定工作目錄;

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

設置目錄掛載

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

以上就是如何基于開源組件使用 CI/CD,丸趣 TV 小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關(guān)注丸趣 TV 行業(yè)資訊頻道。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計4397字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 华蓥市| 奉贤区| 中方县| 防城港市| 庄浪县| 拉萨市| 昂仁县| 宜春市| 丹阳市| 民乐县| 赫章县| 治县。| 股票| 贵州省| 阳原县| 兴义市| 叶城县| 林芝县| 唐海县| 汉川市| 镇坪县| 阜南县| 从化市| 互助| 怀来县| 额济纳旗| 乌拉特中旗| 江孜县| 临西县| 仲巴县| 黔西县| 黄石市| 海丰县| 浮梁县| 霍山县| 玛曲县| 乐山市| 公安县| 合作市| 全州县| 法库县|