在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

如何基于开源组件使用CI/CD

145次阅读
没有评论

共计 4397 个字符,预计需要花费 11 分钟才能阅读完成。

本篇文章给大家分享的是有关如何基于开源组件使用 CI/CD,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。

前言

应对敏捷开发的需求,对 CI(持续集成))/CD(持续交付)的提出了更高的标准,今天来讨论下,如何基于开源组件(gitlab/jenkins/harbor/kubernetes)使用 CI/CD,赋能团队的开发、运维。

核心组件组件名称版本备注 kubernetesv1.15.310.0.0.182:6443jenkins2.176.2 集群内部署 / namespace: devopsgitlab11.8 主机部署 harborv1.7.4docker-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 的部署及配置,其他组件如果你部署有问题,欢迎留言。

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 服务节点,即可。

确认你也已经安装了 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,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计4397字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 亚洲人成未满十八禁网站 | 国产在线看不卡一区二区 | 国产成人综合高清在线观看 | 久久这里有 | 欧美a级成人淫片免费看 | 亚洲欧美精品 | 国产无套精品一区二区三区 | 日本久久久久久久做爰片日本 | 婷婷成人综合激情在线视频播放 | 亚洲成人手机在线 | 日日干夜夜操高清视频 | 青青青国产在线观看免费网站 | 日韩精品av一区二区三区 | 亚洲国产精品综合久久20 | 女被男啪到哭的视频网站 | 一出一进一爽一粗一大视频 | 最新在线精品国自产拍视频 | 国产靠逼视频 | 亚洲国产日韩欧美综合久久 | 国产精品亚洲午夜一区二区三区 | 992tv成人免费视频 | 亚洲国产精品久久久久秋霞影院 | 国产美女激情福利视频蜜臀 | 中文字幕一区二区在线视频 | 99国产精品 | 日本黄色大片免费观看 | 无码人妻一区二区三区免费 | 尤物视频免费在线观看 | 午夜爱爱片| 99久热在线精品视频播 | 无码专区久久综合久中文字幕 | 久久精品免费一区二区喷潮 | 四库影院永久地址www9 | 欧美人与动牲交zooz3d | 国产成人高清精品免费5388密 | 亚洲最大成人网 色香蕉 | 国产精品 第1页 | 特级一级毛片视频免费观看 | 又粗又硬又大又爽免费视频播放 | 国产精品久久久久久妇女6080 | 欧洲美女黑人粗性暴交视频 |