敏行运维
发布于 2023-11-03 / 256 阅读
0

使用Solopace.Gem访问公司内网的Gitlab代码仓库

部署gitlab-ce

本文主要介绍如何通过Solopace.Gem组网的方式完成对内网gitlab的访问,gitlab有多种部署方式,此处不再一一展开,可参考官方文档:

https://docs.gitlab.cn/jh/install/install_methods.html

我们可以通过一条简单的docker命令运行一个测试gitlab实例:

docker run -d -p 10008:80 -p 10009:443 -p 10010:22 --restart always --name gitlab \
-v /data/gitlab/etc/gitlab:/etc/gitlab \
-v /data/gitlab/var/log/gitlab:/var/log/gitlab \
-v /data/gitlab/var/opt/gitlab:/var/opt/gitlab \
--privileged=true gitlab/gitlab-ce

  1. 修改gitlab.rb文件

vim /data/gitlab/etc/gitlab/gitlab.rb

修改如下位置:

# 如果使用公有云且配置了域名了,可以直接设置为域名,如下
external_url 'http://domainname.com'
# 如果没有域名,则直接使用宿主机的ip,如下
external_url 'http://xx.xx.xx.xx'  
# 同样如果有域名,这里也可以直接使用域名
gitlab_rails['gitlab_ssh_host'] =  'domainname.com'
# 同样如果没有域名,则直接使用宿主机的ip地址
gitlab_rails['gitlab_ssh_host'] = 'xx.xx.xx'
# 端口为启动docker时映射的ssh端口
gitlab_rails['gitlab_shell_ssh_port'] =10010 
# 设置时区为东八区,即北京时间
gitlab_rails['time_zone'] = 'Asia/Shanghai'  
  1. 关于邮箱发邮件的配置如下

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"   # 邮箱服务器
gitlab_rails['smtp_port'] = 465    # 邮箱服务对应的端口号
gitlab_rails['smtp_user_name'] = "hitredrose@163.com"   # 发件箱的邮箱地址
gitlab_rails['smtp_password'] = "xxxxxxxxxxx"      # 发件箱对应的授权码,注意不是登录密码,是授权码
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'hitredrose@163.com'     # 发件箱地址
gitlab_rails['gitlab_email_display_name'] = 'gitlab.redrose2100.com'    # 显示名称
gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'     # 提示不要回复
  1. 重启docker

docker restart gitlab
  1. 进入docker容器里

docker exec -it gitlab bash
  1. 修改端口号

vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

如下,将端口修改为映射后的端口

  1. 再次重启gitlab

直接在docker中执行

gitlab-ctl restart

如:

root@cd6a79be7773:/etc/gitlab# gitlab-ctl restart
ok: run: alertmanager: (pid 4567) 1s
ok: run: gitaly: (pid 4582) 1s
ok: run: gitlab-exporter: (pid 4598) 1s
ok: run: gitlab-workhorse: (pid 4603) 1s
ok: run: grafana: (pid 4610) 1s
ok: run: logrotate: (pid 4619) 1s
ok: run: nginx: (pid 4631) 1s
ok: run: postgres-exporter: (pid 4636) 1s
ok: run: postgresql: (pid 4645) 1s
ok: run: prometheus: (pid 4653) 0s
ok: run: puma: (pid 4670) 1s
ok: run: redis: (pid 4679) 0s
ok: run: redis-exporter: (pid 4689) 1s
ok: run: sidekiq: (pid 4697) 1s
ok: run: sshd: (pid 4703) 1s
root@cd6a79be7773:/etc/gitlab
  1. 在内网环境下,浏览器打开 ip:端口号即可访问

  1. 查看默认root密码

cat /docker/gitlab/etc/gitlab/initial_root_password

使用root账号+此处获取的默认密码登录即可,登录后自行修改密码

使用SolopaceGem组网实现在家访问gitlab

SolopaceGem是一款方便易用的异地组网工具,无需硬件、无需技术知识一分钟简单配置即可完成异地组网,方便安全的在任何地方访问家里的NAS、电脑等设备,通过简易部署、网络资源优化利用,建立智能、稳定、高速、低延迟的广域网,实现企业高效智能运维,在全国同地区的分公司之间部署专用网络!

直达官网:https://solopace.doaction.pro/

此时如果想在家远程访问部署在公司内网的这个gitlab,可能会有以下两种情况:

  1. 具备gitlab所在服务器的管理权限

  2. 不具备gitlab所在服务器的管理权限

场景一

在无法登录gitlab服务器的情况下,就无法直接将SolopaceGem客户端安装在服务器上完成组网,此时可以在公司内网找一台与gitlab服务器同网段的linux服务器,部署为SolopaceGem中心服务器,然后开启路由转发,也可以实现对gitlab的访问。

参考:

SolopaceGem中心服务器安装教程

Linux开启路由转发

场景二

如果我们具有登录公司gitlab服务器的权限,则可以直接通过在服务器上安装SolopaceGem Linux或者Docker客户端完成组网。

参考:

SolopaceGem Linux客户端安装教程

SolopaceGem Docker客户端安装教程

在家里的PC上安装SolopaceGem客户端完成组网

参考:

个人组网教程-客户端

企业组网教程

这里我们选择直接在gitlab服务器安装SolopaceGem Linux客户端的方式来组网

直接在服务器执行安装命令:

curl -fsSL https://solopace.doaction.pro/download/sh/install.sh | sh -s stable

安装完成后将返回的组网链接复制到浏览器打开,然后直接输入手机号获取验证码登录

登录后我们选择创建一个新的组网

创建后复制网络ID

然后输入我们刚刚创建复制的网络ID点击确认,如果是场景二则我们应该勾选将服务器设置为中心服务器

点击设备列表可以看到我们这台设备已成功加入组网

在家里的电脑上安装SolopaceGem客户端加入这个组网,然后在客户端上同样输入手机号获取验证码登录

登录后点击左下角加入新网络

选择已有网络ID,如果我们之前创建的网络ID加入

点击连接

连接成功之后点击设备列表查看下当前组网下我们的在线设备

此时可以看到我们家里的个人电脑和公司的gitlab服务器都在线了,然后我们就可以直接通过组网ip来访问这台服务器了

ping测试

测试访问gitlab web页面,可以看到我们直接通过组网IP访问到了公司内网的gitlab

创建一个demo项目,来测试代码拉取和推送,由于我们的gitlab配置的地址是服务器的内网IP,使用SolopaceGem拉取代码时,我们应该将这里的ip换成我们的组网ip

输入我们gitlab的账号密码,可以看到我们成功clone了代码

push测试,在README文件中写入一些内容

可以看到提交代码也是没有任何问题的

至此就可以在家尽情访问公司内网的gitlab代码仓库啦~

拓展

gitlab对接Tekton CI完成自动触发流水线

基于Tekton CI和ArgoCD的GitOps方法实践 一文中我们部署完成了一套基于TektonCI的流水线,要完成基于git push事件自动触发流水线,我们需要完成gitlab与Tekton Triggers的对接

此处不再对Tekton Triggers的具体使用展开说明,可参考官方文档:https://tekton.dev/docs/triggers/

在配置好Tekton Triggers之后,我们会得到一个EventListeners所监听的webhook地址和Token

以我们之前创建的demo项目为例,只需要为这个项目配置上基于特定git事件触发的webhook,即可完成Tekton流水线的自动触发