前提条件
安装KubeSphere,认真阅读全文可免费领取PetaExpress云服务器一台
在KubeSphere中启用DevOps套件
参考:启用DevOps
安装GitLabCE
我们先这次的演练创建一个名为devops的企业空间,同时创建一个名为gitlab的项目供GitLabCE部署使用。
通过应用仓库部署GitLab应用
1.首先我们还是要先在devops企业空间中添加GitLab的官方HelmChart仓库,推荐用这种自管理的方式来保障仓库内容是得到及时同步的。通过「应用管理」下面的「应用仓库」来添加如下的GitLab仓库(仓库URL:https://charts.gitlab.io/)
2.接下来进入先前创建的gitlab项目,从「应用负载」下面的「应用」页面创建GitLab应用:选择「从应用模版」创建即可得到如下界面,注意选择红框指示的这个应用。
点击进入后,点击安装
3.下面这一步十分重要,需要配置HelmChart部署应用的参数。由于GitLab默认的可配置项非常多(有上千行),因此我们这次只挑选可保障基础业务使用的最小功能集的相关参数进行改写,关于每个参数具体代表的含义请参见参数项上一行的注释(并留意【注意】部分)。其它配置项请大家参见极狐。
虽然已经是最小功能集部署,但由于部署的服务及其资源开销较多,部署过程还是比较长的。部署完成后可以在gitlab应用的「工作负载」部分查看到所有负载都在运行中的状态。
4.确认所有工作负载运行后,如之前您已经配置过集群或项目网关并使能过gitlab.example.com的域名解析,那么您就可以直接访问该域名来打开GitLab的站点页面。
在GitLab中创建一个示例项目
首先让我们来登陆GitLab。GitLab的初始密码被作为Secret保存,我们可以回到项目首页,在「配置」下的「保密字典」中搜索initial可以找到gitlab-initial-root-password的条目。点击该字典条目,并在「数据」区块中点击最右侧的眼睛图标来展示password数据项的内容。
复制该密码,并使用root作为用户名,即可登陆GitLab得到如下图所示的界面。
点击「Createaproject」按钮进入创建项目的页面,通过「CreatefromTemplate」我们可以来创建一个示例项目用于后面的流水线演练。
让我们选择NodeJSExpress这个项目模版来创建应用,所有模版都可以通过Preview按钮来预览其中的内容,使用模版后得到如下创建项目界面。
填入您偏好的项目名称,并在项目可见度这里选择默认的Private来创建私有项目,以便于后续演示如何访问私有项目。完成导入后可以得到如下的项目页面。
关闭AutoDevOps并创建Jenkinsfile
由于我们后续要使用KubeSphereDevOps,而GitLab默认开启了AutoDevOps功能(会为无CI配置的项目自动提供流水线支持),为了避免混乱,我们先暂时关闭AutoDevOps。
找到项目页面中间部位的文件及功能快捷入口区域,点击「AutoDevOpsenabled」按钮块,进入配置页面后取消DefaulttoAutoDevOpspipeline的勾选并「Savechanges」,即可完成AutoDevOps功能的关闭。
接下来,我们还需要为这个项目创建一个Jenkinsfile用于后续KubeSphereDevOps流水线的构建。在master分支下直接创建一个名为Jenkinsfile的文件,填入以下内容即可。
使用KubeSphereDevOps为GitLab提供流水线
我们首先在devops的企业空间中创建一个名为demo的DevOps项目,用于后续演练如何为GitLab创建流水线。
将GitLab与KubeSphereJenkins进行绑定
由于KubeSphereJenkins默认绑定的GitLab服务是官方的gitlab.com,因此在创建流水线前需要先重新绑定到我们创建的私有GitLab服务上。
首先,我们需要打开KubeSphereJenkins的页面,为了操作方便,我们直接为kubesphere-devops-system命名空间下的devops-jenkins开放NodePort。
使用KubeSphere账号登陆Jenkins(如果登陆失败可能是账号同步问题,可以修改一次KubeSphere的密码再次尝试)。通过「系统管理➡️系统配置」进入系统配置页面,找到GitLabServers配置区,点击「AddGitLabServer」开始添加我们的GitLab服务。
如上图所示,需要填写或编辑的配置项一共有三项:
ServerURL:这里填入我们刚刚部署完成的GitLab服务的访问方式(如果是域名访问,一定需要是Jenkins也可达的域名)
Crendentials:这里选择或创建一个Jenkins的的凭证项,该凭证需要是GitLab某个用户的PersonalAccessToken(下面我们会继续说明如何创建)
WebHook:这个一定要勾选ManageWebHooks这项,用于我们之后同步JenkinsPipeline的状态到我们的GitLab服务中
创建GitLabPersonalAccessToken的JenkinsCrendential
首先,我们回到GitLab中,可以直接通过/-/profile/personal_access_tokens(例如本文可使用[]())来访问PersonalAccessTokens的创建页面。按Jenkins的要求,我们创建一个名为jenkins且具备apiread_repository
write_repository权限的令牌,复制令牌字符串备用。
然后我们回到Jenkins首页,从「系统管理➡️安全➡️ManageCrendentials➡️StoresscopedtoJenkins➡️Jenkins➡️全局➡️全局凭据(unrestricted)」进入凭证创建页面。
点击左侧面板的「添加凭据」即可开始创建凭证,填写完成后点击Ok保存即可完成凭证创建:
Kind选择GitLab个人令牌
Scope选择默认的全局,ID填入任意不产生命名冲突的ID
Token填入刚刚复制备用的GitLab令牌字符串(可忽略字符串长度的提示)
完成这部分配置之后,KubeSphereDevOps流水线的状态也会和我们GitLab中的Pipeline状态形成联动,大家可以参看视频中的效果。点击这里查看视频链接
使用Jenkinsfile创建KubeSphereDevOps流水线
让我们进入之前创建的demoDevOps项目,开始「创建」流水线。
在弹出的「创建流水线」对话框中,我们填入一个流水线「名称」并点击下方「代码仓库(可选)」这个区域来进行代码仓库绑定。
进入到「选择代码仓库」面板后,我们选择GitLab标签页,然后在「GitLab服务器地址」下拉框中选择我们上一小节在Jenkins中添加到GitLabCE服务器。由于我们演练的是私有仓库访问,下面需要先选择一个凭证用于访问私有代码仓库。在之前没有创建的情况下,这里我们点击绿色的「创建凭证」链接开始创建。
在弹出的「创建凭证」对话框中,输入「名称」后选定类型为用户名和密码;然后在「用户名」文本框中输入我们的账号root,在「密码/令牌」中输入之前从保密字典中获取到的初始密码(gitlab-initial-root-password)。
通过「确定」按钮保存凭证后回到「选择代码面板」,在「凭证」下拉框中选择刚刚创建的gitlab-root,然后在「项目组/所有者」文本库中填入我们的账号root,点击「代码仓库」下拉框可看到root账号下所有的代码仓库,这里我们可以看到并选择之前创建的示例项目root/rak-test-express。
通过☑️按钮确认并保存配置后会再次回到「创建流水线」面板,此时可以看到「代码仓库」已出现我们选择的root/nodejs-demo项目,点击「下一步」进入「高级设置」标签页,这里我们不做额外的配置,直接点击「确定」来创建流水线。创建成功后,我们可以看到如下一个「分支数量」为0并且健康的流水线。
稍后片刻点击进入新建的pipeline-test流水线,可以看到系统已经扫描到带有Jenkinsfile的master分支并已经开始运行流水线。
点击master分支进入分支详情页面,不管运行成功还是失败都可以进一步点击「运行ID」一栏中的序号来查看详细的运行日志及制品等。
等待一段时间后运行成功,进入运行ID为1的运行记录可以看到如下图展示的界面。进一步我们可以点击右上角的「查看日志」按钮来了解详细的流水线执行情况。
注意:对于多分支流水线,默认会先执行checkoutscm步骤,然后再执行Jenkinsfile中定义的流水线内容。
使用图形编辑器创建KubeSphereDevOps流水线
本小节内容可参考KubeSphere官方文档:DevOps 用户指南 / 使用DevOps / 使用图形编辑面板创建流水线
KubeSphereDevOps流水线也可以通过图形编辑界面来进行创建,让我们重新回到demoDevOps项目首页,「创建」一个新流水线。这次在「创建流水线」面板中我们不绑定代码仓库,直接「下一步」再直接「创建」一个名为gui的流水线。
进入流水线详情页面后,我们可以在右侧面板看到「编辑流水线」的按钮,点击后在弹出的「选择流水线模版」对话框中,我们选择自定义流水线。
另两个流水线模版包含了更完整的CI/CD流水线构建示例,但内容相对复杂,欢迎大家线下自行选用进行体验!
下面我们尝试用图形编辑器复现前一小节的两个操作步骤,即拉起代码,并打印一条HelloWorld消息。首先,我们点击左侧面板的+按钮,然后选中添加出来的一个阶段块。
接着我们点击左侧阶段块上的「+添加步骤」,并在右侧刷出的「添加步骤」面板中选则git步骤,在弹出的对话框中填入我们示例代码仓库的地址HTTPGit地址(如),凭证选用之前创建的gitlab-root,分支填写master。
完成后我们依样画葫芦,再次添加一个打印消息步骤并填入HelloWorld!作为内容,最后得到如下图所示的整体效果。
完成编辑后「确定」再「确定」来保存流水线,回到详情页面后,可以通过右上角的「运行」按钮来执行流水线。
运行成功后可以再次查看流水线运行记录,并查看运行日志,得到如下图所示结果。
【番外】使用SSH访问Kubernetes集群中的GitLab代码仓库
前文介绍的代码仓库的访问方式都是通过HTTP的形式,但现实工作中我们最常用的还是SSH的访问方式,那是否可以直接通过[email protected]:root/nodejs-demo.git这样的方式来拉取和推送代码呢?
答案是肯定的:可以!但是这里有一个大坑需要注意——默认SSH用的是22端口,但多了一层Kubernetes网络之后,不管是否使用这个默认端口都需要处理好GitLab如何对外暴露SSH服务。
假设我们可以接受重新绑定一个端口来使用GitLabSSH,那么可以这样操作:
首先,我们回到GitLab部署项目中,找到gitlab-shell服务并为它开放NodePort外部访问端口。
基于这个端口,把Git访问的地址都改为ssh://git@://.git的形式,例如ssh://[email protected]:32253/root/rak-test-express.git
凭此文章可以去PetaExpress官网发工单免费领取2核2G云服务器一台,数量有限先到先得。申领步骤:注册→登录→控制台右上角发工单回复“本文文章网址+文章标题+申请奖励”