您的位置 首页 php

如何使用GitLab和Rancher构建CI/CD流水线 – Part 2

这是我们使用 Gitlab 和Rancher构建CI/CD流水线系列教程的第二部分。第一部分的内容介绍了如何部署、配置和确保GitLab在Rancher的运行。这一部分中,我们将介绍如何使用GitLab CI Multi-Runner构建容器,以及如何使用GitLab容器 registry 配置项目。除此之外,我们还将涉及如何用GitLab CI建立容器并部署到Rancher上。

使用GitLab CI Multi-Runner构建容器

GitLab CI是用于持续集成和持续交付的强大工具。它需要和Rancher配合使用,这里我们将部署一个执行作业的runner。

运行Runner

部署runner有好几种方式,不过考虑到我们的目的是要从自己的存储库中建立容器,我们将运行一个可以直接访问/ var /run/ docker .sock的 Docker 容器,来构建和自身同步的镜像。

  1. 在Rancher中,向你的Gitlab栈添加一个服务。

  2. 使用以下配置进行设置:

  • Name: runner01

  • Image: gitlab/gitlab-runner

  • Console: None

  • Volumes:

    • /var/run/docker.sock:/var/run/docker.sock

    • runner01-etc:/etc/gitlab-runner

容器运行时,它将在/etc/gitlab-runner中创建一个默认配置,该配置对应我们已经建立连接的卷。接下来,用你的Gitlab实例注册runner。

下面操作中,我设置的配置适用于基本的runner,它可以搭建任意作业。你还可以将runner限制在指定的存储库中或是使用其他的镜像。这里你可以阅读GitLab的文档来了解是最适合你的环境的选项。

配置Runner

  1. 在容器中执行shell

  2. 运行gitlab-ci-multi-runner register开始注册

  3. 按照提示信息输入,参考下列示例(答案是粗体字)

root@4bd974b1c799:/# gitlab-ci-multi-runner register

Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g.

Please enter the gitlab-ci token for this runner:

DGQ-J7n0tR33LXB3z_

Please enter the gitlab-ci description for this runner:

[4bd974b1c799]: runner01

Please enter the gitlab-ci tags for this runner (comma separated):

<press enter>

Whether to lock Runner to current project [true/ false ]:

[false]: <press enter>

Registering runner… succeeded runner=DGQ-J7dD

Please enter the executor: docker, parallels, ssh, docker-ssh+machine, kubernetes, docker-ssh, shell, virtualbox, docker+machine:

docker

Please enter the default Docker image (e.g. ruby:2.1):

docker:stable

Runner registered successfully.

放手去执行它们吧,如果runner已经运行,那么配置会自动地就重新加载。这里要着重注意的是:

  • 输入你的Gitlab实例的URL

  • 输入runner令牌(在Admin / Runners中找到)

  • 给runner起一个可被识别的名字

  • 选择runner的docker类型

  • 选择docker:stable容器镜像

在初始的注册完成后,我们需要编辑/etc/gitlab-runner/config.tom并作出调整:

  • volumes = [“/var/run/docker.sock:/var/run/docker.sock”, “/cache”]

这样在容器中装载/var/run/docker.sock,使得构建的容器保存在主机本身的镜像存储中。这是一个比Docker更好的方法。

config.toml的修改是由Runner自动执行的,因此无需重新启动。

你可以在Admin/Runners下看到你的runner并与之交互。

使用容器镜像仓库配置项目

GitLab的容器镜像仓库直接和存储库绑定,因此无法将容器转移到任何其他位置。如果你在docker组中有一个名为 demo -pho的存储库,那么镜像的路径就是registry.example.com/docker/demo-php ,其中的标签是根据你如何用GitLab CI创建容器而定义的。

在本教程的余下部分,我将使用一个存储库,该存储库的内容可以在中找到。需要执行以下内容才能在你的GitLab环境中启动它:

在GitLab中创建一个项目。在本教程中,我给它命名为example/demo(工作组是example,项目是demo)

克隆并修改rancher-gitlab-demo存储库

该文件如下所示:

我设计的这个CI文件可以在多个基本的Docker项目中使用而无需任何修改。在将变量部分的项目设置为你想要的数值后,文件的其余部分就能适用于任何项目。

这里有两个阶段——构建和发布。GitLab有自己的token,可令自己登录到自己的镜像仓库,该操作在before_script部分执行。接下来它在构建阶段执行脚本命令,构建容器并使用TEST_IMAGE变量中指定的格式标记容器。这样获得一个有分支名称的容器,就像我们的develop分支这样:

接下来会推送容器信息进镜像仓库中。

如果是master分支,它会执行所有这些步骤,并且在发布阶段,它在加进镜像仓库前会继续使用latest标记镜像。这样你会得到一个同时标记了master和lastest的容器。其中lastest是默认的标签名,你可以在不指定标签名的情况下获取它。

最后,master分支有一个可供使用的手动选项,可将容器推送至Docker Hub。若要实现这一步,首先需要在GitLab项目中的Settings | CI/CD Pipelines | Secret Variables下设置HUB_USERNAME和HUB_PASSWORD。GitLab CI将根据DOCKER_IMAGE的值重新标记master镜像,接着将其推送至Docker Hub。因为我们已经指定了when下的manual,GitLab不会自动执行,那么就必须从GitLab手动执行此阶段。

通过GitLab CI搭建容器

在develop分支,你可以提交这些更改并将其推送到你的GitLab项目。如果一切都正常运行,你就可以在项目的pipelines标签下看到pipeline启动。你可以选择status图标来查看该阶段下的详细进度日志。

如果出现了任何错误,GitLab CI将报告pipeline失败,你可以查看日志了解原因。当解决了问题并推送新的提交时,GitLab CI将启动新的pipeline。如果错误是暂时的(如无法连接到Docker Hub),你可以再次运行该阶段的pipeline。

如果只想从现有的代码运行pipeline,你可以单击Run Pipeline并选择要构建的分支。

当一切都完成之后,管道会显示Passed,你可以在GitLab项目的Registry标签下看到你的容器。

创建部署用户

在使用镜像仓库之前,你需要将部署用户添加到Rancher。我建议你在你想要部署的项目上创建一个具有Reporter权限的deploy用户,而不要使用你的管理员账户。

  1. 单击右上角的扳手图标进入管理区域

  2. 单击中间列下端的New User按钮

  3. 创建一个名为deploy的用户

  4. 在Access下则说明该用户是External的。这将给用户提供GitLab中的限制访问。

  5. 单击Create User,进入汇总界面

GitLab默认会为用户发送登录电子邮件,因此我们需要编辑用户并设置密码。

  1. 在汇总界面上,单击右上角的Edit

  2. 为用户设置密码,接着单击Save Changes

  3. 在GitLab导航到你的项目,单击Settings后点击Members

  4. 在搜索栏键入deploy并选择deploy用户

  5. 给用户Reporter权限

  6. 点击Add to project保存更改

现在,deploy用户有权从你的项目的容器 注册表 访问容器。

部署容器到Rancher

我们到目前为止的所有步骤都是为了这一步——从你的私有镜像仓库中获取容器并将它部署到Rancher上。我们需要做的最后一件事是添加镜像仓库,然后做一个新的栈和服务。

  1. 在Rancher中,单击Infrastructure并选择Registries

  2. 单击Add Registry

  3. 选择Custom

  4. 输入你的注册表URl(例如example.com)

  5. 输入你的部署用户的用户名和密码

  6. 单机Create

把镜像仓库添加到Rancher之后,你已经可以从这些镜像中创建服务了。

  • 创建一个名为demo的栈

  • 添加一个服务,名字由你决定。让镜像使用你新的容器镜像中的develop标签

    • example.com/example/demo:develop

  • 点击Create

恭喜你!你刚刚已经用私有容器镜像仓库部署了项目的开发版本!

从这里开始可以做什么

这是一个漫长的教程,但当所有的重要步骤完成后,你可以使用已经安装好的工具开始工作了。从现在开始你可以做这些事情:

  • 为你其他的项目设置工作组。对于将要包含的项目,可以使用逻辑集合,像docker或者websites一样。

  • 将其他项目导入GitLab

  • 设置GitLab CI来构建容器

  • 修改master分支,融合develop分支,引入.gitlab-ci.yml,然后将其推送至GitLab。更新Rancher以获取lastest镜像标签。

  • 将HUB_USERNAME和HUB_PASSWORD添加到项目中,然后手动将你的镜像推送至Docker Hub

文章来源:智云一二三科技

文章标题:如何使用GitLab和Rancher构建CI/CD流水线 – Part 2

文章地址:https://www.zhihuclub.com/153235.shtml

关于作者: 智云科技

热门文章

网站地图