gitlab 部署与钉钉集成
gitlab 部署与钉钉集成
gitlab 部署
此处展示 docker 部署 gitlab
docker run \
--hostname 192.168.49.1 \ # 192.168.49.1 为自己局域网的 ip
--publish 7001:443 --publish 80:80 --publish 7003:22 \ # 注意这里的映射的端口
--name gitlab --restart always \ # 容器名称, 以及容器退出策略
--volume ~/code/docker-yml/gitlab/config:/etc/gitlab \ # 配置文件相关映射
--volume ~/code/docker-yml/gitlab/logs:/var/log/gitlab \ # log 文件相关映射
--volume ~/code/docker-yml/gitlab/data:/var/opt/gitlab \ # 数据文件映射
docker.io/gitlab/gitlab-ce:latest
需要注意的是, gitlab 的访问端口 80 在这里映射成为 80 端口. 原因在于 钉钉 sso 登录回跳到 gitlab 的时候会忽略端口号, 造成的结果就是使用 http 默认的 80 端口, 这里为了演示方便直接映射到本机的 80 端口, 实际在生产中可以借助 nginx 来实现 端口转发.
gitlab 的 22 端口映射到了本地的 7003 端口, 22 端口默认就是 ssh 相关操作的端口, ssh 是进行 git 仓库操作的一种方式, 这样配置在实际上的 git 操作上需要做额外的 端口配置. 下面是一个 实例配置 以供参考:
// ssh git@192.168.49.1 -p 7003
Host 192.168.49.1
HostName 192.168.49.1
Port 7003
User git
ProxyCommand nc -v -x 127.0.0.1:7891 %h %p
钉钉集成
这里主要讨论 钉钉 作为 idp, gitlab 作为 sp 来实现 sso. 以及使用 钉钉 的群机器人来作为 webhook 的接受者在群组中展示 gitlab 推送的信息.
sso
钉钉以及 gitlab 相关配置
- 进入 钉钉开放平台

- 点击
开发者后台

- 登录之后选择对应的
企业或者组织

- 上方
应用开发, 选择企业内部开发

- 点击
创建应用, 补充相关信息之后, 点击确认创建

- 点击
应用与功能, 点击登录与共享

- 补充回调域名
http://<ip或者域名>:<无效的端口号>/users/auth/dingtalk/callback, 点击添加

- 选择
基础信息, 点击下面的应用信息, 获取该应用的AppKey和AppSecret

note: 如果你想控制使用该应用的用户或者组权限, 可以在应用 基础信息 下的 权限管理 进行相关操作.
- 进入
docker容器中, 或者停止容器(这里展示使用 vscode 插件进入 gitlab 容器 attach vscode 并进入 etc/config), 编辑config映射的相关文件gitlab.rb, 找到OmniAuth Settings进行如下配置

### OmniAuth Settings
###! Docs: https://docs.gitlab.com/ee/integration/omniauth.html
gitlab_rails['omniauth_enabled'] = true
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml','dingtalk']
# gitlab_rails['omniauth_sync_email_from_provider'] = 'saml'
gitlab_rails['omniauth_sync_profile_from_provider'] = []
# gitlab_rails['omniauth_sync_profile_attributes'] = ['email']
gitlab_rails['omniauth_auto_sign_in_with_provider'] = nil
gitlab_rails['omniauth_block_auto_created_users'] = false
gitlab_rails['omniauth_auto_link_ldap_user'] = true
gitlab_rails['omniauth_auto_link_saml_user'] = true
# gitlab_rails['omniauth_auto_link_user'] = ['saml']
gitlab_rails['omniauth_external_providers'] = ['dingtalk']
gitlab_rails['omniauth_allow_bypass_two_factor'] = []
gitlab_rails['omniauth_providers'] = [
{
"name" => "dingtalk",
"app_id" => "APP_ID", # -> 应用的 AppKey
"app_secret" => "APP_SECRET", # -> 应用的 AppSecret
# "args" => { "access_type" => "offline", "approval_prompt" => "" }
}
]
- 在进行完
sso相关配置之后, 进行mail的相关配置, 找到GitLab email server settings
### GitLab email server settings
###! Docs: https://docs.gitlab.com/omnibus/settings/smtp.html
###! **Use smtp instead of sendmail/postfix.**
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qiye.aliyun.com" # 你自己的 smtp_address
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "username@example.com" # 你自己的 smtp_user_name
gitlab_rails['smtp_password'] = "password" # 你自己的 smtp_password
gitlab_rails['smtp_domain'] = "smtp.qiye.aliyun.com" # 你自己的 smtp_domain
gitlab_rails['smtp_authentication'] = "login"
# gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_pool'] = false
###! **Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert'**
###! Docs: http://api.rubyonrails.org/classes/ActionMailer/Base.html
# gitlab_rails['smtp_openssl_verify_mode'] = 'none'
# gitlab_rails['smtp_ca_path'] = "/etc/ssl/certs"
# gitlab_rails['smtp_ca_file'] = "/etc/ssl/certs/ca-certificates.crt"
### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
##! If your SMTP server does not like the default 'From: gitlab@gitlab.example.com'
##! can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = 'username@example.com' # -> 你自己的 gitlab_email_from
gitlab_rails['gitlab_email_display_name'] = 'Example' # -> 你自己的 gitlab_email_display_name
这里展示的是 smtps 的相关配置而且不是 smtp_enable_starttls_auto, 更多相关信息请看 参考 相关内容
- 进行
smtp server的校验, 以及生效更改的配置
gitlab-rails console
# from 你的测试邮箱 # to 填写的 gitlab_email_from
ActionMailer::Base.mail(from: "test@example.co", to: @receiver, subject: @subject, body: "Test").deliver
# succuse
# 输入 exit 退出 gitlab-rails console
成功之后, 使配置生效
gitlab-ctl reconfigure
测试
- 登录
gitlab
notes: root 账户临时密码存放位置在 /etc/gitlab/initial_root_password

- 扫码登录

- 第一次登录会强制绑定
email, 输入你的email, 在 mail 中确认信息

- 至此钉钉验证结束
思考:
- 我们并没有在 gitlab 中配置钉钉图标, 为什么会在登录页中出现正确的图标?
- OmniAuth 为我们作了什么?
- 你了解 OmniAuth 吗?
群机器人
- 在
钉钉中选择一个将要推送gitlab通知的群, 并确保你有创建机器人的权限

- 选择
gitlab, 点击添加

- 取名字, 点击
完成

- 保存
webhook信息, 点击完成

- 管理员 身份进入
gitlab, 点击admin

- 将
webhook填写到url中, 选中相关事件, 最后点击add system hook

- 测试, 创建对应仓库推送相关代码, 观察是否有机器人发送对应的消息

- 至此, 完成全部流程

浙公网安备 33010602011771号