关于云计算:在-K8s-中快速部署使用-GitLab-并构建-DevOps-项目

38次阅读

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

作者:张海立,KubeSphere 社区 Ambassador、Talented Speaker,社区用户委员会上海站副站长

原文链接:https://kubesphere.com.cn/blo…

新年伊始,“极狐(GitLab) 联结青云(QingCloud 私有云服务和 KubeSphere 容器平台)、上海云轴(ZStack Cloud 云平台和 ZStack Cube 超交融一体机)、宝德计算、上海恒岳等国内多家出名云厂商和服务器厂商,首发 GitNative 系列产品解决方案,针对不同部署环境和利用场景,推出反对私有云、公有云、本地数据中心部署的‘GitNative 一体化 DevOps 平台’和‘GitNative CI/CD 流水线引擎’解决方案。”

在社区看到下面 这条新闻 的时候有种“虎躯一震”的感觉,的确很快乐能看到国内的云社区、云厂商能在 DevOps 畛域有这样接地气的商业产品单干,置信更多这样跨界单干产品的呈现也会推动咱们国内的 DevOps 社区及产品有进一步倒退。那么对于咱们开源社区的小伙伴而言,通过 GitLab 社区版以及 KubeSphere 平台提供的 DevOps 能力,其实也能够本人尝试搭建一套相似的 DevOps 平台来一起感受一下 Kubernetes 时代下 GitOps 体系的魅力。

所以咱们本次分享将和大家一起入手来实际一下在 KubeSphere 部署 GitLab CE(Community Edition 社区版)并构建与之联动的 DevOps 我的项目。

前提条件

装置 KubeSphere

装置 KubeSphere 有两种办法。一是在 Linux 上间接装置,能够参考文档:在 Linux 装置 KubeSphere;二是在已有 Kubernetes 中装置,能够参考文档:在 Kubernetes 装置 KubeSphere。

在 KubeSphere 中启用 DevOps 套件

在 KubeSphere 中启用 DevOps 套件能够参考文档:启用可插拔组建 · KubeSphere DevOps 零碎。装置实现后能够在「平台治理」页面的「零碎组建」局部看到 Jenkins 头像图标。

基于 Jenkins 的 KubeSphere DevOps 零碎是专为 Kubernetes 中的 CI/CD 工作流设计的,它提供了一站式的解决方案,帮忙开发和运维团队用非常简单的形式构建、测试和公布利用到 Kubernetes。它还具备插件治理、Binary-to-Image (B2I)、Source-to-Image (S2I)、代码依赖缓存、代码品质剖析等性能。文本只会波及 KubeSphere DevOps 其中对于流水线应用的局部。

装置 GitLab CE

咱们先这次的演练创立一个名为 devops的企业空间,同时创立一个名为 gitlab的我的项目供 GitLab CE 部署应用。

通过利用仓库部署 GitLab 利用

首先咱们还是要当初 devops企业空间中增加 GitLab 的官网 Helm Chart 仓库,举荐用这种自治理的形式来保障仓库内容是失去及时同步的。通过「利用治理」上面的「利用仓库」来增加如下的 GitLab 仓库(仓库 URL:https://charts.gitlab.io/)。

接下来进入先前创立的 gitlab 我的项目,从「利用负载」上面的「利用」页面创立 GitLab 利用:抉择「从利用模版」创立即可失去如下界面,因为仓库内可装置的 Helm Chart 较多,留神抉择红框批示的这个利用(撰稿时 Chart 最新版为 5.7.0,对于 GitLab 版本为 14.7.0)。

上面这一步非常重要,须要配置 Helm Chart 部署利用的参数。因为 GitLab 默认的可配置项十分多(有上千行),因而咱们这次只筛选 可保障根底业务应用的最小功能集 的相干参数进行改写,对于每个参数具体代表的含意请参见参数项上一行的正文(并注意【留神】局部)。其它配置项请大家参见 极狐 GitLab Helm Chart 疾速开始指南 及其中的 残缺属性列表。

global:
  ## 确保应用的版本是 Community Edition
  edition: ce
  
  ## 全局 Host 配置:https://docs.gitlab.cn/charts/charts/globals.html#host-%E9%85%8D%E7%BD%AE
  #【留神】这里咱们只绑定 GitLab 主体服务的域名,其它都能够应用默认值(不影响演练应用)hosts:
    #【留神】这个根底域名须要是“部署 GitLab 的集群”内能够拜访的域名,否则各组件互联可能存在问题
    domain: example.com
    #【留神】咱们演练环境为了部署不便不启用 HTTPS,否则须要提供和填写的根底域名对应的证书
    https: false
    gitlab: 
      name: gitlab.example.com

  ## 全局 Ingress 配置:https://docs.gitlab.cn/charts/charts/globals.html#ingress-%E9%85%8D%E7%BD%AE
  ingress:
    #【留神】咱们因为全面敞开 HTTPS,所以这里也须要敞开 GitLab 自带的证书生成器
    configureCertmanager: false
    #【留神】因为默认是应用自带 Nginx,即应用 "gitlab-nginx",须要改为 KubeSphere 网关适配的值
    class: nginx
    #【留神】默认是 true,须要强制敞开 HTTPS,和其它配置保持一致
    tls:
      enabled: false
  
## 自带的 cert-manager 配置:https://github.com/jetstack/cert-manager
#【留神】这里强制抉择不装置 cert-manager
certmanager:
  installCRDs: false
  install: false
  
## 自带的 Nginx Ingress 配置:https://docs.gitlab.cn/charts/charts/nginx/
#【留神】因为演练会间接应用 KubeSphere 我的项目 / 集群网关,这里间接敞开此项的装置配置
nginx-ingress:
  enabled: false
  
## 自带的工件仓库组件:https://docs.gitlab.cn/charts/charts/registry/
#【留神】因为不开启 HTTPS,应用各类工件仓库会有问题,这里倡议就间接敞开此项装置配置
registry:
  enabled: false
    
## 自带的 MinIO 配置:https://docs.gitlab.cn/charts/charts/minio/
#【留神】因为能够后续自行在 KubeSphere 中开启利用路由,这里倡议间接敞开网关路由配置
minio:
  ingress:
    enabled: false
  
## 自带的 GitLab Runner 配置:https://docs.gitlab.cn/charts/charts/gitlab/gitlab-runner/
#【留神】因为演练环境咱们间接接入 KubeSphere DevOps 做 CI/CD,这里倡议就先不装置 Runner 
gitlab-runner:
  install: false

尽管曾经是最小功能集部署,但因为部署的服务及其资源开销较多,部署过程还是比拟长的。部署实现后能够在 gitlab利用的「工作负载」局部查看到所有负载都在运行中的状态。

此时 gitlab 利用状态处于 正在创立,这是因为利用部署超时导致的,只有所有工作负载能够失常进入运行状态,是并不影响利用失常应用的。

因为部署工夫很长,容易导致 MinIO 组件的舒服化 Bucket 工作失败,倡议查看「利用负载」下的 gitlab-minio-create-buckets-1 工作,如果失败能够通过详情页左侧「更多操作」来「从新运行」,最终失去 已实现(1/1)的状态即可认为胜利。

确认所有工作负载运行后,如之前您曾经配置过集群或我的项目网关并使能过 gitlab.example.com 的域名解析,那么您就能够间接拜访该域名来关上 GitLab 的站点页面。

对于如何在 KubeSphere 中设置集群或我的项目网关,您能够参考咱们之前的 技术博客。同时请确保您的网关是能够间接应用 HTTP 规范的 **80** 端口来提供拜访能力的!

在 GitLab 中创立一个示例我的项目

首先让咱们来登陆 GitLab。GitLab 的初始密码被作为 Secret 保留,咱们能够回到我的项目首页,在「配置」下的「窃密字典」中搜寻 initial 能够找到 gitlab-initial-root-password的条目。点击该字典条目,并在「数据」区块中点击最右侧的眼睛图标来展现 password 数据项的内容。

复制该明码,并应用 root 作为用户名,即可登陆 GitLab 失去如下图所示的界面。

点击「New Project」按钮进入创立我的项目的页面,通过「Create from Template」咱们能够来创立一个示例我的项目用于前面的流水线演练。

让咱们抉择 NodeJS Express 这个我的项目模版来创立利用,所有模版都能够通过 Preview 按钮来预览其中的内容,应用模版后失去如下创立我的项目界面。

填入您偏好的项目名称,并在我的项目可见度这里抉择默认的 Private 来创立公有我的项目,以便于后续演示如果拜访公有我的项目。实现导入后能够失去如下的我的项目页面。

敞开 Auto DevOps 并创立 Jenkinsfile

因为咱们后续要应用 KubeSphere DevOps,而 GitLab 默认开启了 Auto DevOps 性能(会为无 CI 配置的我的项目主动提供流水线反对),为了防止凌乱,咱们先临时敞开 Auto DevOps。

找到我的项目页面两头部位的文件及性能快捷入口区域,点击「Auto DevOps enabled」按钮块,进入配置页面后勾销 Default to Auto DevOps pipeline 的勾选并「Save changes」,即可实现 Auto DevOps 性能的敞开。

接下来,咱们还须要为这个我的项目创立一个 Jenkinsfile 用于后续 KubeSphere DevOps 流水线的构建。在 master 分支下间接创立一个名为 Jenkinsfile 的文件,填入以下内容即可。

pipeline {
    agent any
    stages {stage('Example') {
            steps {echo 'Hello World'}
        }
    }
    post { 
        always {echo 'I will always say Hello again!'}
    }
}

应用 KubeSphere DevOps 为 GitLab 提供流水线

咱们首先在 devops 的企业空间中创立一个名为 demo 的 DevOps 我的项目,用于后续演练如何为 GitLab 创立流水线。

将 GitLab 与 KubeSphere Jenkins 进行绑定

因为 KubeSphere Jenkins 默认绑定的 GitLab 服务是官网的gitlab.com,因而在创立流水线前须要先从新绑定到咱们创立的公有 GitLab 服务上。

首先,咱们须要关上 KubeSphere Jenkins 的页面,为了操作不便,咱们间接为 kubesphere-devops-system 命名空间下的 devops-jenkins 凋谢 NodePort。

应用 KubeSphere 账号登陆 Jenkins(如果登陆失败可能是账号同步问题,能够批改一次明码再次尝试 )。通过「Manage Jenkins ➡️ Configure System」进入系统配置页面,找到 GitLab Servers 配置区,点击「Add GitLab Server」开始增加咱们的 GitLab 服务。

如上图所示,须要填写或编辑的配置项一共有三项:

  • Server URL:这里填入咱们刚刚部署实现的 GitLab 服务的拜访形式(如果是域名拜访,肯定须要是 Jenkins 也可达的域名)
  • Crendentials:这里抉择或创立一个 Jenkins 的的凭证项,该凭证须要是 GitLab 某个用户的 Personal Access Token(上面咱们会持续阐明如何创立)
  • Web Hook:这个肯定要勾选 Manage Web Hooks这项,用于咱们之后同步 Jenkins Pipeline 的状态到咱们的 GitLab 服务中

创立 GitLab Personal Access Token 的 Jenkins Crendential

首先,咱们回到 GitLab 中,能够间接通过 <gitlab-url>/-/profile/personal_access_tokens(例如本文可应用[http://gitlab.example.com/-/profile/personal_access_tokens](http://gitlab.example.com:30433/-/profile/personal_access_tokens))来拜访 Personal Access Tokens 的创立页面。按 Jenkins 的要求,咱们创立一个名为 jenkins 且具备 api`read_repository`write_repository 权限的令牌,复制令牌字符串备用。

而后咱们回到 Jenkins 首页,从「Manage Jenkins ➡️ Manage Crendentials ➡️ Stores scoped to Jenkins ➡️ Jenkins ➡️ Global crendentials (unrestricted)」进入凭证创立页面。

点击左侧面板的「Add Credentials」即可开始创立凭证,填写实现后点击 Ok 保留即可实现凭证创立:

  • Kind抉择GitLab Personal Access Token
  • Scope抉择默认的 GlobalID 填入任意不产生命名抵触的 ID
  • Token填入刚刚复制备用的 GitLab 令牌字符串(可疏忽字符串长度的提醒)

实现这部分配置之后,KubeSphere DevOps 流水线的状态也会和咱们 GitLab 中的 Pipeline 状态造成联动,大家能够参看视频中的成果。

  • https://www.bilibili.com/vide…

应用 Jenkinsfile 创立 KubeSphere DevOps 流水线

让咱们进入之前创立的demoDevOps 我的项目,开始「创立」流水线。

在弹出的「创立流水线」对话框中,咱们填入一个流水线「名称」并点击下方「代码仓库(可选)」这个区域来进行代码仓库绑定。

进入到「抉择代码仓库」面板后,咱们抉择 GitLab 标签页,而后在「GitLab 服务器地址」下拉框中抉择咱们上一大节在 Jenkins 中增加到 GitLab CE 服务器。
因为咱们演练的是公有仓库拜访,上面须要先抉择一个凭证用于拜访公有代码仓库。在之前没有创立的状况下,这里咱们点击绿色的「创立凭证」链接开始创立。

在弹出的「创立凭证」对话框中,输出「名称」后选定类型为 用户名和明码;而后在「用户名」文本框中输出咱们的账号root,在「明码 / 令牌」中输出之前从窃密字典中获取到的初始密码。

通过「确定」按钮保留凭证后回到「抉择代码面板」,在「凭证」下拉框中抉择刚刚创立的 gitlab-root,而后在「项目组 / 所有者」文本库中填入咱们的账号root,点击「代码仓库」下拉框可看到root 账号下所有的代码仓库,这里咱们能够看到并抉择之前创立的示例我的项目root/nodejs-demo

通过 ☑️ 按钮确认并保留配置后会再次回到「创立流水线」面板,此时能够看到「代码仓库」已呈现咱们抉择的 root/nodejs-demo 我的项目,点击「下一步」进入「高级设置」标签页,这里咱们不做额定的配置,间接点击「确定」来创立流水线。创立胜利后,咱们能够看到如下一个「分支数量」为 0 并且衰弱的流水线。

稍后片刻点击进入新建的 file 流水线,能够看到零碎曾经扫描到带有 Jenkinsfilemaster分支并曾经开始运行流水线。

点击 master 分支进入分支详情页面,不论运行胜利还是失败都能够进一步点击「运行 ID」一栏中的序号来查看具体的运行日志及制品等。

期待一段时间后运行胜利,进入运行 ID 为 1 的运行记录能够看到如下图展现的界面。进一步咱们能够点击右上角的「查看日志」按钮来理解具体的流水线执行状况。

留神:对于多分支流水线,默认会先执行 checkout scm 步骤,而后再执行 Jenkinsfile 中定义的流水线内容。

应用图形编辑器创立 KubeSphere DevOps 流水线

本大节内容可参考 KubeSphere 官网文档:DevOps 用户指南 / 应用 DevOps / 应用图形编辑面板创立流水线

KubeSphere DevOps 流水线也能够通过图形编辑界面来进行创立,让咱们从新回到 demoDevOps 我的项目首页,「创立」一个新流水线。这次在「创立流水线」面板中咱们不绑定代码仓库,间接「下一步」再间接「创立」一个名为gui 的流水线。

进入流水线详情页面后,咱们能够在右侧面板看到「编辑流水线」的按钮,点击后在弹出的「抉择流水线模版」对话框中,咱们抉择 自定义流水线

另两个流水线模版蕴含了更残缺的 CI / CD 流水线构建示例,但内容绝对简单,欢送大家线下自行选用进行体验!

上面咱们尝试用图形编辑器复现前一大节的两个操作步骤,即拉起代码,并打印一条 Hello World 音讯。首先,咱们点击左侧面板的 + 按钮,而后选中增加进去的一个阶段块。

接着咱们点击左侧阶段块上的「+ 增加步骤」,并在右侧刷出的「增加步骤」面板当选则 git 步骤,在弹出的对话框中填入咱们示例代码仓库的地址 HTTP Git 地址(如[http://gitlab.example.com/root/nodejs-demo.git](http://gitlab.example.com/root/nodejs-demo.git)),凭证选用之前创立的gitlab-root,分支填写master

实现后咱们如法炮制,再次增加一个 打印消息 步骤并填入 Hello World! 作为内容,最初失去如下图所示的整体成果。

实现编辑后「确定」再「确定」来保留流水线,回到详情页面后,能够通过右上角的「运行」按钮来执行流水线。

运行胜利后能够再次查看流水线运行记录,并查看运行日志,失去如下图所示后果。

【番外】应用 SSH 拜访 Kubernetes 集群中的 GitLab 代码仓库

前文介绍的代码仓库的拜访形式都是通过 HTTP 的模式,但事实工作中咱们最罕用的还是 SSH 的拜访形式,那是否能够间接通过 git clone git@gitlab.example.com:root/nodejs-demo.git 这样的形式来拉取和推送代码呢?

答案是必定的:能够!然而这里有一个大坑须要留神 —— 默认 SSH 用的是 22 端口,但多了一层 Kubernetes 网络之后,不论是否应用这个默认端口都须要解决好 GitLab 如何对外裸露 SSH 服务。

假如咱们能够承受从新绑定一个端口来应用 GitLab SSH,那么能够这样操作:

  • 首先,咱们回到 GitLab 部署我的项目中,找到 gitlab-shell服务并为它凋谢 NodePort 内部拜访端口

  • 基于这个端口,把 Git 拜访的地址都改为 ssh://git@<gitlab-url>:<gitlab-shell-port>/<username>/<repo>.git 的模式,例如ssh://git@gitlab.example.com:32222/root/nodejs-demo.git

写在最初:感谢您这么急躁的看完这整个教程!如果您感觉这些内容如果本人部署起来的确有点挑战,那举荐能够看看 极狐 GitLab 和 KubeSphere Cloud 的一些商业产品,让业余的人做业余的事儿,开释大家的工夫更好的打磨本人的业务产品。也期待看到更多的开源社区和商业产品的良性互动,一起推动咱们国内的软件产业在虎年“虎踞龙盘今胜昔,天翻地覆慨而慷”!
本文由博客一文多发平台 OpenWrite 公布!

正文完
 0