如何使⽤GitLab和Rancher构建CICD流⽔线–Part1
介绍
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
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”,GitLab的主机名设置为“git”,Docker Registry的主机名设置为“regitstry”。在执⾏下⼀步前需确保你已经将相应的记录添加到DNS区域⽂件中,且这些记录均指向运⾏均衡器的主机。(PS:这⾥需要签的域名必须是公⽹可解析)
部署LetsEncrypt
从Rancher社区Catalog中,选择LetsEncrypt服务。接受第⼀个下拉列表中的TOS,然后按以下设置准备HTTP验证:
你的Email地址: you@yourdomain
证书名: gitlab
域名: ample
域验证⽅法: 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.编辑负载均衡器nginx ssl证书配置
2.添加以下服务规则:
Public / HTTP
Host: ample
Port: 80
Target: gitlab
Port: 80
Public / HTTPS
Host: ample
Port: 443
Target: gitlab
Port: 80
Public / HTTPS
Host: ample
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⽂档的链接,⽂档描述了该服务的功能以及每个变量的调整。
在本教程中,需要到以下变量,更改或者取消它们的注释:
external_url ‘ample’
gitlab_rails['gitlab_ssh_host'] = 'ample’
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'git@example'
gitlab_rails['gitlab_email_display_name'] = 'Gitlab'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@example'
gitlab_rails['gravatar_plain_url'] = 'avatar/avatar/%{hash}?s=%{size}&d=identicon'
gitlab_rails['gravatar_ssl_url'] = 'avatar/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'
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 'ample’
gitlab_rails['registry_enabled'] = true
gitlab_rails['registry_host'] = 'ample'
gitlab_rails['registry_api_url'] = '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'] = 'ample'
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将重建它的配置,重启那些需要的服务。
登录
现在你已经准备好了!在你的浏览器中输⼊,会出现⼀个要求你输⼊密码的界⾯。这⾥默认⽤户是root,如果你设置了密码,系统将要求你重新登录。
恭喜你!你有了⼀个正在运⾏的GitLab实例!
现在还有⼀些需要我们从GitLab内部做的⼯作来巩固它,请你接着读下去。
锁定它
我建议你去做以下变更操作:
更改root⽤户名
以root⾝份登录任何内容都是不安全的,因为该⽤户名是⼀个众所周知的⽬标。现在你是以唯⼀的⽤户⾝份登录进来的,那么第⼀件事就是更改你的⽤户名。
点击位于右上⾓、在搜索栏旁边的扳⼿图标
在中间列的底部选择管理员
选择右上⾓的编辑按钮
更改你的名字、⽤户名和邮箱地址
向下滚动并单击“保存更改”
管理员账户的旧邮箱地址是admin@example,更改此信息只是尝试向该账户发送电⼦邮件来通知这些更改。我敢相信example邮箱的⼈会吃惊于他们收到的电⼦邮件数。
返回Rancher,到你的postfix容器和Execute Shell
输⼊mailq,按下Enter键。你应该看到延迟的邮件在队列中,注意ID
输⼊postsuper –d<id>,按下Enter键,将从队列中删除该消息。
禁⽌公开注册
下⼀步的更改将使Internet不再接管你的新GitLab实例,也不能再将其⽤于恶意的⽬的。
再次点击扳⼿图像,返回到管理控制台
点击右上⾓齿轮图标的下拉菜单,选择设置
你可以根据需要调整其中任意⼀项,但你需要禁⽤在Sign-up Restrictions下的Sign-up enabled默认值
检查你的端⼝
在这个例⼦中,我们使⽤了80、443、2222端⼝。GitLab不需要主机上的其他端⼝,不过2222端⼝并不是通⽤端⼝。你需要确认你已经在防⽕墙中打开了它(2222端⼝)。
这会有⼀个很棒的GitLab安装过程。你可以⽴即为你的项⽬启动它。是的,在GitLab中还有很多事情要做!
添加你的SSH密钥
尽管你可以通过HTTPS使⽤GitLab,然⽽使⽤SSH指令执⾏则更为常见。在执⾏此操作之前,需要将你的SSH公钥添加到GitLab,这样它会识别你的⾝份。如果你没有SSH密钥,你可以⽤下列代码制作⼀个(Linux或Mac系统上):
ssh-keygen -b 2048
尽可能使⽤密码⼝令确保安全——你的密钥有以特权⽤户⾝份登录的权限,如果笔记本电脑遭到⼊侵,你也不愿为攻击者提供访问级别。(如果你不想使⽤密码⼝令或处理SSH代理,请访问上优秀的Kryptonite项⽬)
使⽤默认值(或选择新的密钥名称)保存,接着在GitLab中:
点击右上⾓的头像旁边的下拉菜单,选择设置,然后选择SSH密钥
将你的公钥(.pub⽂件中的内容)粘贴到打开页⾯的框中
很快我们将发布该系列的第⼆部分,其中将介绍如何使⽤GitLab CI Multi-Runner构建容器,以及如何使⽤GitLab容器registry配置项⽬。除此之外,我们还将涉及如何⽤GitLab CI建⽴容器并部署到Rancher上。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论