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 [email protected] -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'] = "[email protected]" # 你自己的 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: [email protected]'
##! can change the 'From' with this setting.
gitlab_rails['gitlab_email_from'] = '[email protected]' # -> 你自己的 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: "[email protected]", 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
- 测试, 创建对应仓库推送相关代码, 观察是否有机器人发送对应的消息
- 至此, 完成全部流程
参考
- docker 部署 gitlab
- docker-compose 部署 gitlab
- k8s 部署 gitlab
- ssh config 配置端口
- 钉钉 sso 接入文档
- gitlab 配置 钉钉 sso
- gitlab 配置 email
- gitlab 配置 smtp
- docker的gitlab邮箱配置
- gitlab 测试 smtp
- gitlab 配置 ding_talk sso
- 钉钉机器人
- gitlab webhook 配置