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

简介:

介绍


GitLab核心是集成管理Git存储库的工具。比如你希望创建一个提供服务的平台,那么GitLab将提供强大的身份验证和授权机制、工作组、问题跟踪、wiki和片段,除此之外还有公有、内部和私有存储库。


GitLab强大之处在于,它包含强大的持续集成(CI)引擎和Docker容器镜像仓库,让使用者从开发到发布都使用相同的实用工具。它还有两个更强大的开源软件实用工具:Prometheus负责监控,Mattermost负责和团队沟通。该平台有着坚实的API并能和多个现有第三方系统集成,如:JIRA,Bugzilla,Pivotal,Slack,HipChat,Bamboo等。


这里就有这样一个疑问:为什么使用GitLab而不是直接使用SaaS 服务?答案只是个人品味而已。对大多数人来说,向SaaS提供商购买其提供的服务是一个很好的解决方案。你可以专注于搭建你的应用程序,让他们去操心维护这些工具。而如果你已拥有的基础设施有备用容量怎么办?如果你只想私有化存储库而不想为该权限付费时该怎么办?如果你想运用你的数学头脑由自己托管来省钱该怎么办?如果你只想拥有你自己的数据该怎么办?


由内部提供服务可以让你有更多的时间管理它们并让它们之间相互通信来消除风险,这就是GitLab的出众之处。仅需要一次点击和几分钟的配置,你就可以启动并运行一个完整的解决方案。


部署GitLab


Rancer的Catalog包含了安装最新版GitLab CE的条目。它假设你有一个主机,希望为HTTP/HTTPS直接打开80和443端口,并且打开一个端口映射到容器内的22端口。


Catalog条目会根据你提供的值设置环境变量GITLAB_OMNIBUS_CONFIG。然后GitLab在发布时将这些值并入配置。对于非常基本的GitLab部署,Catalog提供的选择是完全足够的,不过我仍希望向你展示更多的内容…


在本教程中,我们将部署GitLab CE,不过我们不会打开任何端口。主机端口非常昂贵,因此稍后我们会使用一个负载均衡器。我们将配置HTTPS和Docker Registry,并将其与Rancher配合使用。


  1.  创建一个名为gitlab的新应用

  2.  向gitlab应用添加一个服务

  • Image: gitlab/gitlab-ce:latest

  • Volumes:

    • gitlab-etc:/etc/gitlab

    • gitlab-opt:/var/opt/gitlab

    • gitlab-log:/var/log/gitlab

  • Networking

    • Set a specific host name: git

  • Health Check

    • HTTP: Port 80

    • Path: GET /HTTP/1.0

  3.  向postfix服务中添加一个配对

  • Image: tozd/postfix

  • Environment:

    • MY_NETWORKS:10.42.0.0/16, 127.0.0.0/8

    • ROOT_ALIAS: you@yourdomain.com

  • Volumes:

    • postfix-log:/var/log/postfix

    • postfix-spool:/var/spool/postfix

  • Health Check:

    • TCP: Port 25


运行之前,你还需完成几个选项来配置GitLab:


  1. 将所有的GitLab变量添加到GITLAB_OMNIBUS_CONFIG

  2. 稍后设置所有变量


对于首次使用的用户来说,我建议选择第二项。GitLab提供的gitlab.rb文件在默认设置下文档已经很丰富,如果你之前没有接触过GitLab,参考这份文件就可以得到大量功能的说明介绍。


接着,单击Launch键,Rancher将抓取镜像并呈现给你。


设置SSL卸载


Rancher在抓取镜像的时候,我们来用HTTPS添加一个负载均衡器。为此,我们首先要创建一个LetsEncrypt容器,然后将其添加到负载均衡器中,等待证书注册。注册完成后,将GitLab的配置添加到负载均衡器上。


在这个例子中,我将使用域名“example.com”,GitLab的主机名设置为“git”,Docker Registry的主机名设置为“regitstry”。在执行下一步前需确保你已经将相应的记录添加到DNS区域文件中,且这些记录均指向运行均衡器的主机。(PS:这里需要签的域名必须是公网可解析)


部署LetsEncrypt


  • 从Rancher社区Catalog中,选择LetsEncrypt服务。接受第一个下拉列表中的TOS,然后按以下设置准备HTTP验证:

    • 你的Email地址: you@yourdomain.com

    • 证书名: gitlab

    • 域名: git.example.com,registry.example.com

    • 域验证方法: HTTP

  • 单击Launch以发布容器。现在开始你有120秒来完成下一步。


部署负载均衡器


  • 在gitlab栈中,单击“添加服务”旁边的下拉菜单,然后选择添加负载均衡器。给它取个名字,接着添加下面的服务选择器。另外,如果你已经有了一个负载均衡器的环境,编辑它,添加下面的服务。

    • Public / HTTP

    • Port: 80

    • Path: /.well-known/acme-challenge

    • Target: letsencrypt

    • Port: 80

  • 单击“编辑”保存你所做的变更。


监控LetsEncryt容器的日志,两分钟后,就可以获得它已经注册了两个域的证书的报告。如果你收到状态403或503的错误报告,那么需要检查负载均衡器配置,确认设置无误。LetsEncrypt容器将重新启动并继续尝试注册证书。注册成功后,你就可以在Rancher界面中的基础设施选项卡中找到该证书。


到这为止我们已经准备好通过负载均衡器向GitLab添加SSL支持:


  1.  编辑负载均衡器

  2.  添加以下服务规则:

  • Public / HTTP

    • Host: git.example.com

    • Port: 80

    • Target: gitlab

    • Port: 80

  • Public / HTTPS

    • Host: git.example.com

    • Port: 443

    • Target: gitlab

    • Port: 80

  • Public / HTTPS

    • Host: registry.example.com

    • Port: 443

    • Target: gitlab

    • Port: 80

  • Public / TCP

    • Port: 2222

    • Target: gitlab

    • Port: 22

  3.  单击“编辑”保存你所做的更改。


配置GitLab


GitLab的配置保存在容器中的/etc/gitlab/gitlab.rb下。当我们启动服务时,我们创建了一个Docker卷用于持久化存储这些数据。在Rancher中,找到你的GitLab容器,使用Execute Shell登录。将存储地址改为/etc/gitlab,然后编辑gitlab.rb。


在gitlab.rb中有很多变量可以调整GitLab的行为。这里每一个部分都包含了一个指向GitLab文档的链接,文档描述了该服务的功能以及每个变量的调整。


在本教程中,需要找到以下变量,更改或者取消它们的注释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
external_url ‘https: //git.example.com’
gitlab_rails[ 'gitlab_ssh_host' ] = 'git.example.com’
gitlab_rails[ 'gitlab_email_enabled' ] =  true
gitlab_rails[ 'gitlab_email_from' ] =  'git@example.com'
gitlab_rails[ 'gitlab_email_display_name' ] =  'Gitlab'
gitlab_rails[ 'gitlab_email_reply_to' ] =  'noreply@example.com'
gitlab_rails[ 'gravatar_plain_url' ] =  'https://secure.gravatar.com/avatar/%{hash}?s=%{size}&d=identicon'
gitlab_rails[ 'gravatar_ssl_url' ] =  'https://secure.gravatar.com/avatar/%{hash}?s=%{size}&d=identicon'
gitlab_rails[ 'gitlab_shell_ssh_port' ] =  2222
gitlab_rails[ 'smtp_enable' ] =  true
gitlab_rails[ 'smtp_address' ] =  'postfix'
gitlab_rails[ 'smtp_port' ] =  25
gitlab_rails[ 'smtp_domain' ] =  'yourdomain.com'
gitlab_rails[ 'smtp_authentication' ] =  false
gitlab_rails[ 'smtp_enable_starttls_auto' ] =  false
gitlab_rails[ 'manage_backup_path' ] =  true
gitlab_rails[ 'backup_path' ] =  '/var/opt/gitlab/backups'
gitlab_rails[ 'backup_archive_permissions' ] =  0644
gitlab_rails[ 'backup_pg_schema' ] =  'public'
gitlab_rails[ 'backup_keep_time' ] =  604800
registry_external_url 'https: //registry.example.com’
gitlab_rails[ 'registry_enabled' ] =  true
gitlab_rails[ 'registry_host' ] =  'registry.example.com'
gitlab_rails[ 'registry_api_url' ] =  'http://localhost:5000'
gitlab_rails[ 'registry_key_path' ] =  '/var/opt/gitlab/gitlab-rails/certificate.key'
gitlab_rails[ 'registry_path' ] =  '/var/opt/gitlab/gitlab-rails/shared/registry'
gitlab_rails[ 'registry_issuer' ] =  'omnibus-gitlab-issuer'
registry[ 'enable' ] =  true
registry[ 'token_realm' ] =  'https://git.example.com'
nginx[ 'listen_port' ] =  80
nginx[ 'listen_https' ] =  false
nginx[ 'proxy_set_headers' ] = {
  'Host'  =>  '$http_host_with_default' ,
  'X-Real-IP'  =>  '$remote_addr' ,
  'X-Forwarded-For'  =>  '$proxy_add_x_forwarded_for' ,
  'X-Forwarded-Proto'  =>  'https' ,
  'X-Forwarded-Ssl'  =>  'on' ,
  'Upgrade'  =>  '$http_upgrade' ,
  'Connection'  =>  '$connection_upgrade'
}
registry_nginx[ 'enable' ] =  true
registry_nginx[ 'listen_port' ] =  80
registry_nginx[ 'listen_https' ] =  false
registry_nginx[ 'proxy_set_headers' ] = {
  'Host'  =>  '$http_host' ,
  'X-Real-IP'  =>  '$remote_addr' ,
  'X-Forwarded-For'  =>  '$proxy_add_x_forwarded_for' ,
  'X-Forwarded-Proto'  =>  'https' ,
  'X-Forwarded-Ssl'  =>  'on'
}
registry_nginx[ 'custom_gitlab_server_config' ] =  'proxy_cache_convert_head off;'


在这些变量变更之后,意味着以下工作你已经完成了:

 

  1. 为你的Git URLs设置主机名

  2. 配置GitLab将HTTP反向到HTTPS

  3. 启用HTTP和HTTPS两者的HTTPS gravatar URLs(在避免内容混合的错误时是必要的)

  4. 将报告的SSH端口设为2222

  5. 激活来自GitLab的邮件

  6. 通过Postfix助手启动邮件传递

  7. 激活一个星期保留期的夜间备份

  8. 启用容器registry

  9. 激活GitLab的配置和必需的标题,让GitLab知道它是在SSL负载均衡器之后


保存此文件,接着输入gitlab-ctl reconfigure,按Enter键重新配置GitLab。GitLab将重建它的配置,重启那些需要的服务。


登录


现在你已经准备好了!在你的浏览器中输入https://git.example.com,会出现一个要求你输入密码的界面。这里默认用户是root,如果你设置了密码,系统将要求你重新登录。


恭喜你!你有了一个正在运行的GitLab实例!


现在还有一些需要我们从GitLab内部做的工作来巩固它,请你接着读下去。


锁定它


我建议你去做以下变更操作:


更改root用户名


以root身份登录任何内容都是不安全的,因为该用户名是一个众所周知的目标。现在你是以唯一的用户身份登录进来的,那么第一件事就是更改你的用户名。


  1. 点击位于右上角、在搜索栏旁边的扳手图标

  2. 在中间列的底部选择管理员

  3. 选择右上角的编辑按钮

  4. 更改你的名字、用户名和邮箱地址

  5. 向下滚动并单击“保存更改”


管理员账户的旧邮箱地址是admin@example.com,更改此信息只是尝试向该账户发送电子邮件来通知这些更改。我敢相信example.com邮箱的人会吃惊于他们收到的电子邮件数。


  1. 返回Rancher,找到你的postfix容器和Execute Shell

  2. 输入mailq,按下Enter键。你应该看到延迟的邮件在队列中,注意ID

  3. 输入postsuper –d<id>,按下Enter键,将从队列中删除该消息。


禁止公开注册


下一步的更改将使Internet不再接管你的新GitLab实例,也不能再将其用于恶意的目的。

 

  1. 再次点击扳手图像,返回到管理控制台

  2. 点击右上角齿轮图标的下拉菜单,选择设置

  3. 你可以根据需要调整其中任意一项,但你需要禁用在Sign-up Restrictions下的Sign-up enabled默认值


检查你的端口


在这个例子中,我们使用了80、443、2222端口。GitLab不需要主机上的其他端口,不过2222端口并不是通用端口。你需要确认你已经在防火墙中打开了它(2222端口)。


这会有一个很棒的GitLab安装过程。你可以立即为你的项目启动它。是的,在GitLab中还有很多事情要做!


添加你的SSH密钥


尽管你可以通过HTTPS使用GitLab,然而使用SSH指令执行则更为常见。在执行此操作之前,需要将你的SSH公钥添加到GitLab,这样它会识别你的身份。如果你没有SSH密钥,你可以用下列代码制作一个(Linux或Mac系统上):

1
ssh-keygen -b  2048

尽可能使用密码口令确保安全——你的密钥有以特权用户身份登录的权限,如果笔记本电脑遭到入侵,你也不愿为攻击者提供访问级别。(如果你不想使用密码口令或处理SSH代理,请访问https://krypt.co上优秀的Kryptonite项目)


使用默认值(或选择新的密钥名称)保存,接着在GitLab中:


  • 点击右上角的头像旁边的下拉菜单,选择设置,然后选择SSH密钥

  • 将你的公钥(.pub文件中的内容)粘贴到打开页面的框中

 

很快我们将发布该系列的第二部分,其中将介绍如何使用GitLab CI Multi-Runner构建容器,以及如何使用GitLab容器registry配置项目。除此之外,我们还将涉及如何用GitLab CI建立容器并部署到Rancher上。


原文来源:Rancher Labs



本文转自 RancherLabs 51CTO博客,原文链接:http://blog.51cto.com/12462495/1953088

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
4天前
无缝构建与部署:GitLab CI/CD首秀的实战攻略
无缝构建与部署:GitLab CI/CD首秀的实战攻略
13 0
无缝构建与部署:GitLab CI/CD首秀的实战攻略
|
25天前
|
Java 测试技术 API
云效流水线构建gradle项目失败提示gradle版本过低如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
27 0
|
28天前
|
JavaScript jenkins 持续交付
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)
45 0
|
28天前
|
Devops 开发工具 数据安全/隐私保护
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/5)
42 0
|
2月前
|
安全 Devops Java
你以为搞个流水线每天跑,团队就在使用CI/CD实践了?
在实践中,很多团队对于DevOps 流水线没有很透彻的理解,要不就创建一大堆流水线,要不就一个流水线通吃。实际上,流水线的设计和写代码一样,需要基于“业务场景”进行一定的设计编排,特别是很多通过“开源工具”搭建的流水线,更需要如此(商业的一体化平台大部分已经把设计思想融入自己产品里了)。 • 流水线的设计与分支策略有关 • 流水线的设计与研发活动有关 清晰的代码结构,标准的环境配置,原子化的流水线任务编排,再加上团队的协作纪律,和持续优化的动作,才是真正的践行CI/CD实践
110 4
|
2月前
|
JavaScript Java API
云效问题之流水线使用npm制品仓库构建拉取依赖特别慢如何解决
云效仓库是阿里云提供的代码托管和版本控制服务,支持Git等多种版本管理工具;本合集聚焦于云效仓库的使用技巧、团队协作流程以及常见问题解答,旨在帮助开发者更高效地进行代码管理和协作开发。
102 0
|
2月前
|
网络协议 Go 持续交付
云效问题之流水线镜像构建都报错如何解决
云效镜像是指存储在阿里云效服务中的容器镜像,它们可以用于持续集成和持续部署(CI/CD)流程中;本合集将介绍如何在云效平台上管理和使用镜像资源,以及常见的镜像问题和解决办法。
41 0
|
3月前
|
Shell 开发工具 git
GitLab CI/CD
GitLab CI/CD
53 0
|
3月前
|
缓存 数据安全/隐私保护 Docker
安装gitlab
安装gitlab
143 0
|
6月前
|
Prometheus 监控 Cloud Native
私有仓库Gitlab的安装与汉化
私有仓库Gitlab的安装与汉化
104 0