0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在KubeSphere 容器中快速部署使用 GitLab 并构建 DevOps 项目

jf_57681485 来源:jf_57681485 作者:jf_57681485 2024-07-26 11:19 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前提条件

安装KubeSphere,认真阅读全文可免费领取PetaExpress云服务器一台。

在KubeSphere中启用DevOps套件

参考:启用DevOps https://kubesphere.io/zh/docs/v3.4/pluggable-components/devops/

安装GitLabCE

我们先这次的演练创建一个名为devops的企业空间,同时创建一个名为gitlab的项目供GitLabCE部署使用。

通过应用仓库部署GitLab应用

首先我们还是要先在devops企业空间中添加GitLab的官方HelmChart仓库,推荐用这种自管理的方式来保障仓库内容是得到及时同步的。通过「应用管理」下面的「应用仓库」来添加如下的GitLab仓库(仓库URL:https://charts.gitlab.io/)

wKgZomajFbGAKFM8AAAkQAhb3Tc459.jpg

2.接下来进入先前创建的gitlab项目,从「应用负载」下面的「应用」页面创建GitLab应用:选择「从应用模版」创建即可得到如下界面,注意选择红框指示的这个应用。

wKgaomajFbGAD04VAAAuw0Y8-Mo055.jpgwKgZomajFbaALa8iAAA_VOxxJY8793.jpg

点击进入后,点击安装

wKgaomajFbeAZ73zAAAtcwPypBY879.jpg

3.下面这一步十分重要,需要配置HelmChart部署应用的参数。由于GitLab默认的可配置项非常多(有上千行),因此我们这次只挑选可保障基础业务使用的最小功能集的相关参数进行改写,关于每个参数具体代表的含义请参见参数项上一行的注释(并留意【注意】部分)。其它配置项请大家参见极狐

wKgZomajFbiADAerAABpaPms5Mg138.jpgwKgaomajFbiAC8x1AAB6c1Gnc5Q264.jpg



wKgaomajFbmAJ-4NAAB73Hw27f0043.jpg


wKgZomajFbqAGimuAACA3rTa_Vc926.jpg


wKgZomajFbqALY12AABzBWKFU1M686.jpg

虽然已经是最小功能集部署,但由于部署的服务及其资源开销较多,部署过程还是比较长的。部署完成后可以在gitlab应用的「工作负载」部分查看到所有负载都在运行中的状态。

4.确认所有工作负载运行后,如之前您已经配置过集群或项目网关并使能过gitlab.example.com的域名解析,那么您就可以直接访问该域名来打开GitLab的站点页面。

在GitLab中创建一个示例项目

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

wKgaomajFbuAFsRZAABK3RWh4tE303.jpg

复制该密码,并使用root作为用户名,即可登陆GitLab得到如下图所示的界面。

wKgZomajFb2AB-6dAABJLzFp6KE306.jpg

点击「Createaproject」按钮进入创建项目的页面,通过「CreatefromTemplate」我们可以来创建一个示例项目用于后面的流水线演练。

让我们选择NodeJSExpress这个项目模版来创建应用,所有模版都可以通过Preview按钮来预览其中的内容,使用模版后得到如下创建项目界面。

wKgaomajFb6AXcgtAAA_eLgoRg0997.jpg

填入您偏好的项目名称,并在项目可见度这里选择默认的Private来创建私有项目,以便于后续演示如何访问私有项目。完成导入后可以得到如下的项目页面。

wKgZomajFb6AYa73AABarNmm7q8740.jpg

关闭AutoDevOps并创建Jenkinsfile

由于我们后续要使用KubeSphereDevOps,而GitLab默认开启了AutoDevOps功能(会为无CI配置的项目自动提供流水线支持),为了避免混乱,我们先暂时关闭AutoDevOps。

找到项目页面中间部位的文件及功能快捷入口区域,点击「AutoDevOpsenabled」按钮块,进入配置页面后取消DefaulttoAutoDevOpspipeline的勾选并「Savechanges」,即可完成AutoDevOps功能的关闭。

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

wKgaomajFb-ADFuOAAAuxHp-AI0106.jpg

使用KubeSphereDevOps为GitLab提供流水线

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

将GitLab与KubeSphereJenkins进行绑定

由于KubeSphereJenkins默认绑定的GitLab服务是官方的gitlab.com,因此在创建流水线前需要先重新绑定到我们创建的私有GitLab服务上。

首先,我们需要打开KubeSphereJenkins的页面,为了操作方便,我们直接为kubesphere-devops-system命名空间下的devops-jenkins开放NodePort。

wKgZomajFb-ACJGkAAA73NQ7aQE592.jpg

使用KubeSphere账号登陆Jenkins(如果登陆失败可能是账号同步问题,可以修改一次KubeSphere的密码再次尝试)。通过「系统管理➡️系统配置」进入系统配置页面,找到GitLabServers配置区,点击「AddGitLabServer」开始添加我们的GitLab服务。

wKgaomajFcCAOJrVAAA6R9hKjvM464.jpg

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

ServerURL:这里填入我们刚刚部署完成的GitLab服务的访问方式(如果是域名访问,一定需要是Jenkins也可达的域名)

Crendentials:这里选择或创建一个Jenkins的的凭证项,该凭证需要是GitLab某个用户的PersonalAccessToken(下面我们会继续说明如何创建)

WebHook:这个一定要勾选ManageWebHooks这项,用于我们之后同步JenkinsPipeline的状态到我们的GitLab服务中

创建GitLabPersonalAccessToken的JenkinsCrendential

首先,我们回到GitLab中,可以直接通过/-/profile/personal_access_tokens(例如本文可使用[http://gitlab.example.com/-/profile/personal_access_tokens](http://gitlab.example.com:30433/-/profile/personal_access_tokens))来访问PersonalAccessTokens的创建页面。按Jenkins的要求,我们创建一个名为jenkins且具备api``read_repository``write_repository权限的令牌,复制令牌字符串备用。

wKgZomajFcKAakwuAABbSYSaNjw982.jpg

然后我们回到Jenkins首页,从「系统管理➡️安全➡️ManageCrendentials➡️StoresscopedtoJenkins➡️Jenkins➡️全局➡️全局凭据(unrestricted)」进入凭证创建页面。

wKgaomajFcKAapWbAAAsHoIjOvU283.jpg

点击左侧面板的「添加凭据」即可开始创建凭证,填写完成后点击Ok保存即可完成凭证创建:

Kind选择GitLab个人令牌

Scope选择默认的全局,ID填入任意不产生命名冲突的ID

Token填入刚刚复制备用的GitLab令牌字符串(可忽略字符串长度的提示)

完成这部分配置之后,KubeSphereDevOps流水线的状态也会和我们GitLab中的Pipeline状态形成联动,大家可以参看视频中的效果。

wKgZomajFcOAXgfxAAAZ6e4R0CQ241.png

使用Jenkinsfile创建KubeSphereDevOps流水线

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

wKgaomajFcOAYhXRAAAic9PrgKo493.jpg

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

wKgZomajFcSAWhhIAAAn9vcQfvg080.jpg

进入到「选择代码仓库」面板后,我们选择GitLab标签页,然后在「GitLab服务器地址」下拉框中选择我们上一小节在Jenkins中添加到GitLabCE服务器。由于我们演练的是私有仓库访问,下面需要先选择一个凭证用于访问私有代码仓库。在之前没有创建的情况下,这里我们点击绿色的「创建凭证」链接开始创建。

wKgaomajFcWAZAlRAAAxMnEzA2Y201.jpg

在弹出的「创建凭证」对话框中,输入「名称」后选定类型为用户名和密码;然后在「用户名」文本框中输入我们的账号root,在「密码/令牌」中输入之前从保密字典中获取到的初始密码(gitlab-initial-root-password)。

wKgZomajFcaAQU6LAAAq3foppEI375.jpg

通过「确定」按钮保存凭证后回到「选择代码面板」,在「凭证」下拉框中选择刚刚创建的gitlab-root,然后在「项目组/所有者」文本库中填入我们的账号root,点击「代码仓库」下拉框可看到root账号下所有的代码仓库,这里我们可以看到并选择之前创建的示例项目root/rak-test-express。

wKgaomajFciAZIAWAAAxXgRs_q0903.jpg

通过☑️按钮确认并保存配置后会再次回到「创建流水线」面板,此时可以看到「代码仓库」已出现我们选择的root/nodejs-demo项目,点击「下一步」进入「高级设置」标签页,这里我们不做额外的配置,直接点击「确定」来创建流水线。创建成功后,我们可以看到如下一个「分支数量」为0并且健康的流水线。

wKgZomajFciAUZDIAAAk-10AqUw692.jpg

稍后片刻点击进入新建的pipeline-test流水线,可以看到系统已经扫描到带有Jenkinsfile的master分支并已经开始运行流水线。

wKgaomajFcmAOBDJAAAlepsIwio885.jpg

点击master分支进入分支详情页面,不管运行成功还是失败都可以进一步点击「运行ID」一栏中的序号来查看详细的运行日志及制品等。

wKgZomajFcyAN8GOAAAhEvjKTuM980.jpg

等待一段时间后运行成功,进入运行ID为1的运行记录可以看到如下图展示的界面。进一步我们可以点击右上角的「查看日志」按钮来了解详细的流水线执行情况。

wKgaomajFc2APojoAABDJbsC9XE878.jpg

注意:对于多分支流水线,默认会先执行checkoutscm步骤,然后再执行Jenkinsfile中定义的流水线内容。

使用图形编辑器创建KubeSphereDevOps流水线

本小节内容可参考KubeSphere官方文档:DevOps用户指南/使用DevOps/使用图形编辑面板创建流水线。

KubeSphereDevOps流水线也可以通过图形编辑界面来进行创建,让我们重新回到demoDevOps项目首页,「创建」一个新流水线。这次在「创建流水线」面板中我们不绑定代码仓库,直接「下一步」再直接「创建」一个名为gui的流水线。

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

wKgZomajFc6AfO3wAAAnzypaIdA473.jpgwKgaomajFdKAL9T2AABEgIwMAoI117.jpg

另两个流水线模版包含了更完整的CI/CD流水线构建示例,但内容相对复杂,欢迎大家线下自行选用进行体验!

下面我们尝试用图形编辑器复现前一小节的两个操作步骤,即拉起代码,并打印一条HelloWorld消息。首先,我们点击左侧面板的+按钮,然后选中添加出来的一个阶段块。

wKgZomajFdOAf9OTAAA5TSaQglo778.jpg

接着我们点击左侧阶段块上的「+添加步骤」,并在右侧刷出的「添加步骤」面板中选则git步骤,在弹出的对话框中填入我们示例代码仓库的地址HTTPGit地址(如),凭证选用之前创建的gitlab-root,分支填写master。

wKgaomajFdWARVJvAAAt05dni0Q093.jpg

完成后我们依样画葫芦,再次添加一个打印消息步骤并填入HelloWorld!作为内容,最后得到如下图所示的整体效果。

wKgZomajFdaAOnhpAAAzVEMS8pg166.jpg

完成编辑后「确定」再「确定」来保存流水线,回到详情页面后,可以通过右上角的「运行」按钮来执行流水线。

wKgaomajFdaAX1K8AAAqbOwNxNk611.jpg

运行成功后可以再次查看流水线运行记录,并查看运行日志,得到如下图所示结果。

wKgZomajFdeASz0kAAA3Xv95KLM139.jpg

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

前文介绍的代码仓库的访问方式都是通过HTTP的形式,但现实工作中我们最常用的还是SSH的访问方式,那是否可以直接通过gitclonegit@gitlab.example.com:root/nodejs-demo.git这样的方式来拉取和推送代码呢?

答案是肯定的:可以!但是这里有一个大坑需要注意——默认SSH用的是22端口,但多了一层Kubernetes网络之后,不管是否使用这个默认端口都需要处理好GitLab如何对外暴露SSH服务。

假设我们可以接受重新绑定一个端口来使用GitLabSSH,那么可以这样操作:

首先,我们回到GitLab部署项目中,找到gitlab-shell服务并为它开放NodePort外部访问端口

wKgaomajFdeAXmesAAA-KVulZnY254.jpg

基于这个端口,把Git访问的地址都改为:

wKgZomajFdiAP3T8AAAumHbvxWE473.png

凭此文章可以去PetaExpress官网发工单免费领取2核2G云服务器一台,数量有限先到先得。申领步骤:注册→登录→控制台右上角发工单回复“本文文章网址+文章标题+申请奖励

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    14

    文章

    10440

    浏览量

    91848
  • devops
    +关注

    关注

    0

    文章

    157

    浏览量

    12976
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ​RK3576单板机Docker镜像构建容器运行手册

    本文为创龙科技RK3576 单板机 Docker 开发指南,涵盖 Docker 安装、本地仓库配置、ARM 架构镜像构建容器拉取与运行管理。支持单 / 多镜像批量构建、本地仓库推送、容器
    的头像 发表于 05-16 13:50 5527次阅读
    ​RK3576单板机Docker镜像<b class='flag-5'>构建</b>与<b class='flag-5'>容器</b>运行手册

    行业洞察篇__数字孪生项目演进的“双引擎”模式:场景构建与业务运维的协同路径

    ;而那些能够提供完整工具链——包括场景构建、数据集成、运维控制以及私有化部署方案——的平台,正在成为招标的亮点。决策者们需要意识到,选择数字孪生平台本质上是选择一套“数字运营的操作
    发表于 05-14 09:56

    使用WIN10系统正常下载TMC-EvalSystem-3.11.1 项目及最新的API,无法正常构建项目怎么解决?

    当我使用WIN10系统,正常下载TMC-EvalSystem-3.11.1 项目及最新的API。无法正常构建项目;使用的eclipse版本如图 可能是环境配置问题,但已经安装了mingw
    发表于 05-08 06:59

    私有化与国产化约束下重建 DevOps 工具链:从代码托管到 CI 的一体化实践

    金融、政务、货车和工业软件DevOps并不是一个“从0到1搭建搭建工具链团队”的简单命题,而是一次“受约束条件极多的系统重构”。 这些约束并非抽象的理论,而是具体到日常研发的每一条采购:代码
    的头像 发表于 04-30 10:14 243次阅读

    打破 DevOps 局部效率陷阱 构建端到端价值流交付体系

    了基础CI/CD工具链价值建设,业务交付的降本增效效果已经达到预期,研运的短板已经阻碍了业务高速发展的核心一步。 ##一、企业DevOps实践面临的三大共性痛点 当前企业DevOps建设普遍梯度“局部优化易、全局提效难”的困境,核心痛点集中
    的头像 发表于 04-21 17:19 416次阅读

    亚马逊云科技Amazon DevOps Agent智能运维助手正式可用

    科技、多云及本地环境,快速排查故障、主动预防问题,优化应用可靠性与性能,高效处理各类SRE任务。 运维团队常因繁琐排障、多工具数据比对、手动分类告警耗费大量时间,挤占创新与战略工作精力。Amazon DevOps Agent可
    的头像 发表于 04-07 14:59 210次阅读

    免费本地部署的数据库 DevOps 工具,能覆盖多少日常工作场景?以 NineData 社区版为例

    本文以 NineData 社区版为例,探讨免费本地部署的数据库 DevOps 工具。其不是单一审核模板,而是集成多能力的本地工作台,涵盖日常操作、治理协同、运维保障等功能,将查、审、改、追等动作衔接。适合有本地化部署需求、数据源
    的头像 发表于 03-17 14:57 708次阅读
    免费本地<b class='flag-5'>部署</b>的数据库 <b class='flag-5'>DevOps</b> 工具,能覆盖多少日常工作场景?以 NineData 社区版为例

    RA MCU众测宝典 | RA MCU上快速部署LWIP——以CPKCOR-RA8D1为例

    makeWorks在上一篇文章我们分享了RA上快速部署LVGL的案例,但是FSP丰富强大的功能还远不止于此,除了LVGL,LWIP也早已被FSP纳入自身的功能中间件
    的头像 发表于 12-24 12:06 5790次阅读
    RA MCU众测宝典 | <b class='flag-5'>在</b>RA MCU上<b class='flag-5'>快速</b><b class='flag-5'>部署</b>LWIP——以CPKCOR-RA8D1为例

    如何快速云服务器上部署Web环境?

    如何快速云服务器上部署Web环境
    的头像 发表于 10-14 14:16 965次阅读

    本地部署openWebUI + ollama+DeepSeek 打造智能知识库实现远程访问

    Ubuntu 系统为例,部署 ZeroNews +Open WebUI + Ollama,构建自己的 DeepSeek 平台 部署步骤 我们通过Docker
    的头像 发表于 09-10 16:41 5590次阅读
    本地<b class='flag-5'>部署</b>openWebUI + ollama+DeepSeek 打造智能知识库<b class='flag-5'>并</b>实现远程访问

    Keil 项目构建目标 software 时,FCARM 工具报错

    使用工具搜索问题,Keil 项目 构建目标 software 时,FCARM 工具报错,搜索是未指定输出文件名。 根据网上提供的解决办法,魔法棒OUTPUT中点击Create H
    发表于 08-27 10:12

    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—Docker容器部署方法说明

    本指导文档主要演示Docker容器部署的方法,基于Docker运行led_flash例程。
    的头像 发表于 08-06 15:55 864次阅读
    国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—Docker<b class='flag-5'>容器</b><b class='flag-5'>部署</b>方法说明

    Ansible代码上线项目实战案例

    DevOps浪潮,自动化部署已经成为每个运维工程师的必备技能。今天我将分享一个完整的Ansible代码上线项目实战案例,让你的
    的头像 发表于 07-24 14:03 829次阅读

    Helm实现容器化运维高效包管理与应用部署

    在当今快速演变的云原生生态系统容器化技术已成为运维工程师不可或缺的核心能力。
    的头像 发表于 07-14 11:16 1083次阅读

    如何使用Docker部署大模型

    随着深度学习和大模型的快速发展,如何高效地部署这些模型成为了一个重要的挑战。Docker 作为一种轻量级的容器化技术,能够将模型及其依赖环境打包成一个可移植的容器,极大地简化了
    的头像 发表于 05-24 16:39 1435次阅读