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 来实现 端口转发.

gitlab22 端口映射到了本地的 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 相关配置

  1. 进入 钉钉开放平台

进入开放平台

  1. 点击 开发者后台

点击开发者后台

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

选择目标组织

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

企业内部开发

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

创建应用

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

登录与共享

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

补充回调域名

  1. 选择 基础信息, 点击下面的 应用信息, 获取该应用的 AppKeyAppSecret

获取 key 和 secret

note: 如果你想控制使用该应用的用户或者组权限, 可以在应用 基础信息 下的 权限管理 进行相关操作.

  1. 进入 docker 容器中, 或者停止容器(这里展示使用 vscode 插件进入 gitlab 容器 attach vscode 并进入 etc/config), 编辑 config 映射的相关文件 gitlab.rb, 找到 OmniAuth Settings 进行如下配置

进入 docker 容器

### 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" => "" }
  }
]
  1. 在进行完 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, 更多相关信息请看 参考 相关内容

  1. 进行 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

测试

  1. 登录 gitlab

notes: root 账户临时密码存放位置在 /etc/gitlab/initial_root_password

登录 gitlab

  1. 扫码登录

登录

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

点击确认

  1. 至此钉钉验证结束

思考:

  • 我们并没有在 gitlab 中配置钉钉图标, 为什么会在登录页中出现正确的图标?
  • OmniAuth 为我们作了什么?
  • 你了解 OmniAuth 吗?

群机器人

  1. 钉钉 中选择一个将要推送 gitlab 通知的群, 并确保你有创建机器人的权限

群机器人

  1. 选择 gitlab, 点击 添加

图 14

  1. 取名字, 点击 完成

完成

  1. 保存 webhook 信息, 点击 完成

图 16

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

gitlab 管理员

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

add hook

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

测试

  1. 至此, 完成全部流程

参考

posted @ 2022-11-16 13:23  述不作  阅读(1003)  评论(0编辑  收藏  举报