关键词:
这是我们使用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容器,来构建和自身同步的镜像。
在Rancher中,向你的Gitlab栈添加一个服务。
使用以下配置进行设置:
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
在容器中执行shell
运行gitlab-ci-multi-runner register开始注册
按照提示信息输入,参考下列示例(答案是粗体字)
[email protected]:/# gitlab-ci-multi-runner register
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://git.example.com
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创建容器而定义的。
在本教程的余下部分,我将使用一个存储库,该存储库的内容可以在github中找到。需要执行以下内容才能在你的GitLab环境中启动它:
在GitLab中创建一个项目。在本教程中,我给它命名为example/demo(工作组是example,项目是demo)
克隆并修改rancher-gitlab-demo存储库
$ git clone https://github.com/oskapt/rancher-gitlab-demo.git demo $ cd demo $ git remote set-url origin ssh://[email protected]:2222/example/demo.git $ git push -u origin master
该文件如下所示:
variables: REGISTRY_HOST: registry.example.com TEST_IMAGE: $REGISTRY_HOST/$CI_PROJECT_PATH:$CI_BUILD_REF_NAME RELEASE_IMAGE: $REGISTRY_HOST/$CI_PROJECT_PATH:latest stages: - build - release before_script: - docker info - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $REGISTRY_HOST build: stage: build script: - docker build --pull -t $TEST_IMAGE . - docker push $TEST_IMAGE release: stage: release script: - docker pull $TEST_IMAGE - docker tag $TEST_IMAGE $RELEASE_IMAGE - docker push $RELEASE_IMAGE only: - master push_to_docker_hub: # in order for this to work you will need to set # `HUB_USERNAME` and `HUB_PASSWORD` as CI variables # in the Gitlab project stage: release variables: DOCKER_IMAGE: $HUB_USERNAME/$CI_PROJECT_NAME:latest script: - docker login -u $HUB_USERNAME -p $HUB_PASSWORD - docker tag $RELEASE_IMAGE $DOCKER_IMAGE - docker push $DOCKER_IMAGE only: - master when: manual
我设计的这个CI文件可以在多个基本的Docker项目中使用而无需任何修改。在将变量部分的项目设置为你想要的数值后,文件的其余部分就能适用于任何项目。
这里有两个阶段——构建和发布。GitLab有自己的token,可令自己登录到自己的镜像仓库,该操作在before_script部分执行。接下来它在构建阶段执行脚本命令,构建容器并使用TEST_IMAGE变量中指定的格式标记容器。这样获得一个有分支名称的容器,就像我们的develop分支这样:
registry.example.com/example/demo: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用户,而不要使用你的管理员账户。
单击右上角的扳手图标进入管理区域
单击中间列下端的New User按钮
创建一个名为deploy的用户
在Access下则说明该用户是External的。这将给用户提供GitLab中的限制访问。
单击Create User,进入汇总界面
GitLab默认会为用户发送登录电子邮件,因此我们需要编辑用户并设置密码。
在汇总界面上,单击右上角的Edit
为用户设置密码,接着单击Save Changes
在GitLab导航到你的项目,单击Settings后点击Members
在搜索栏键入deploy并选择deploy用户
给用户Reporter权限
点击Add to project保存更改
现在,deploy用户有权从你的项目的容器注册表访问容器。
部署容器到Rancher
我们到目前为止的所有步骤都是为了这一步——从你的私有镜像仓库中获取容器并将它部署到Rancher上。我们需要做的最后一件事是添加镜像仓库,然后做一个新的栈和服务。
在Rancher中,单击Infrastructure并选择Registries
单击Add Registry
选择Custom
输入你的注册表URl(例如example.com)
输入你的部署用户的用户名和密码
单机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
原文来源:Rancher Labs
本文出自 “12452495” 博客,请务必保留此出处http://12462495.blog.51cto.com/12452495/1953181
rancher+gitlab+appveyor实现ci/cd流水线(汇总)(代码片段)
rancher+gitlab+appveyor实现CI/CD流水线本文主要是做一些汇总,将近期接触并弄好的一些工具整合起来,弄一套流水线,减轻一定工作压力工具介绍所有的组件都是使用docker跑的,所以一款好用的docker的ui管理工具很重要,那就是ranche... 查看详情
用于 GAS 的 React App + Node Gitlab ci cd 管道(构建和部署)
...ldandDeploy)【发布时间】:2020-06-2021:11:44【问题描述】:您如何创建2个阶段1构建react应用程序,然后一个阶段将文件部署到GAE?我现在的YML是这样的:image:\'google/cloud-sdk:slim\'build-st 查看详情
使用 GitLab CI/CD 等 GitHub 操作
】使用GitLabCI/CD等GitHub操作【英文标题】:UsingGitHubactionslikeGitLabCI/CD【发布时间】:2020-09-0915:41:34【问题描述】:我刚刚开始将我所有的GitLab存储库迁移到GitHub。我有一段时间没有使用GitHub,所以我偶然发现了-至少对我来说是新... 查看详情
如何使用 CI/CD 为 Gitlab 注册表推送基于 docker compose 的图像
】如何使用CI/CD为Gitlab注册表推送基于dockercompose的图像【英文标题】:HowcanIpushdockercomposebasedimagesforGitlabRegistryUsingCI/CD【发布时间】:2021-11-2509:53:15【问题描述】:我已经使用docker-compose链接了PostgresDB和API图像,它在本地工作,... 查看详情
ci/cd之jenkins(代码片段)
...装gitlab插件jenkins和gitlab联动jenkins轮询检查gitlab代码变更使用webhook实时检查gitlab代码变更推送dockerfile文件自动构建镜像新增agent节点jenkins用户管理CI/CD简介CI(Continuousintegration持续集 查看详情
ci/cd之jenkins(代码片段)
...装gitlab插件jenkins和gitlab联动jenkins轮询检查gitlab代码变更使用webhook实时检查gitlab代码变更推送dockerfile文件自动构建镜像新增agent节点jenkins用户管理CI/CD简介CI(Continuousintegration持续集 查看详情
如何使用 GitLab CI/CD 合并分支?
】如何使用GitLabCI/CD合并分支?【英文标题】:HowdoImergebranchesusingGitLabCI/CD?【发布时间】:2021-12-2411:02:20【问题描述】:job1:stage:buildscript:-echo\'Hello\'-gitbranch-gitmergecicdtags:-cicd我想在运行job的时候合并一个分支,但是执行job命令后... 查看详情
基于jenkins+maven+gitlab+harbor+rancher+k8s的ci/cd实现(尚未完成,还在更新中)(代码片段)
1、Jenkins安装1.1、配置java环境变量,使用的是jdk1.8的,上传jdk包到/usr/local/java目录下#创建java下载安装目录mkdir-p/usr/local/java#编辑profile文件,配置java环境变量vim/etc/profileexportPATH=$PATH:$HOME/bin:/usr/local/java/jdk 查看详情
如何正确设置环境变量 Gitlab CI/CD 和 Docker
】如何正确设置环境变量GitlabCI/CD和Docker【英文标题】:HowtosetenvironmentalvariablesproperlyGitlabCI/CDandDocker【发布时间】:2020-01-1003:02:15【问题描述】:我是Docker和带有GitlabCI/CD的CI/CD的新手。我的Django项目的根目录中有.env文件,其中... 查看详情
如何使用dockerdocker-compose和rancher搭建部署pipeline
在这篇文章中,我们将讨论如何用Rancher实现consul的服务发现。如果你还没有准备好,推荐你阅读本系列中先前的文章:第一篇:CI/CD和Docker入门第二篇:使部署逻辑向使用DockerCompose更进一步第三篇:借力Rancher完成容器编排在这... 查看详情
Flutter 集成测试和 Gitlab CI/CD
...【发布时间】:2021-01-1505:28:35【问题描述】:我正在尝试使用基于thistutorial的Fastlane和GitLab为我的Flutter应用程序设置CI/CD,但是我在使用Flutter驱动程序自动化Flutter集成测试时遇到了一些困难。我遇到的问题是,当所有测试都成... 查看详情
GitLab CI/CD 管道在构建 Debian 包时找不到 GCC
...以下管道中,作业失败,因为它在PATH中找不到gcc。这是使用官方的GCCdocker镜像。我也将此工作流程用于另一个项目。image:gccv 查看详情
Vue Cypress 和 Gitlab CI/CD
...布时间】:2020-07-0309:01:03【问题描述】:我目前正在尝试使用他们的CI/CD平台在Gitlab上运行我的E2E测试。我目前的问题是我的开发服务器和cypress不能同时运行,以便E2E测试可以运行。这是我当前的.gitlab-ci.yml文件:image:nodevariables... 查看详情
gitlab-ci/cd(代码片段)
Gitlab-Runner自动构建服务器搭建1这里讲到的gitlab仓库指的是https://gitlab.com/,自建gitlab仓库也基本相同。项目的构建打包过程相对比较消耗系统性能,所以gitlab将这部分任务都交给了gitlab-runner来做,因为gitlab-runner可以部署到不同... 查看详情
用于在 AWS EC2 中构建和部署 docker 映像的 CI/CD 脚本
...awsEC2【发布时间】:2021-12-0811:06:45【问题描述】:我可以使用此CI/CD配置构建、推送(到gitlab注册表)和部署映像(到awsEC2)吗?stages:-build-deploybuild:#Usetheofficialdockerimage.i 查看详情
Gitlab CI/CD 到 Digital Ocean 使用 docker-compose 进行多个 repos
】GitlabCI/CD到DigitalOcean使用docker-compose进行多个repos【英文标题】:GitlabCI/CDtoDigitalOceanformultiplereposusingdocker-compose【发布时间】:2020-10-3016:25:57【问题描述】:目前我在Gitlab中有一个项目(repo),它是一个Angular应用程序。我正在使... 查看详情
Gitlab CI/CD 如何在管道中捕获 curl 响应
】GitlabCI/CD如何在管道中捕获curl响应【英文标题】:GitlabCI/CDhowtocatchcurlresponseinpipeline【发布时间】:2022-01-0901:48:30【问题描述】:我有pipeline启动一些maven/java应用程序,现在我想添加test阶段,我检查应用程序是否成功启动,例... 查看详情
ci/cd技术专题「jenkins实战系列」如何通过gitlab对接jenkins构建提交自动触发部署构建体系指南(上部)(代码片段)
前因后果最近,发现我们公司的自动化体系做的实在是不咋地,每次提交push完代码之后,还需要登录到服务器进行执行下docker脚本,之后才能拿到镜像,一说到这里我就要吐了,CI/CD做的简直是一团糟... 查看详情