温馨提示×

Linux下GitLab如何集成

小樊
43
2025-12-10 15:36:07
栏目: 智能运维

Linux下GitLab集成实践指南

一 集成总览与选型

  • 身份与单点登录:优先使用LDAP/AD统一账号;如需企业级SSO,可用Kerberos(仅GitLab EE)。
  • 交付与自动化:使用内置CI/CD,在Linux上注册GitLab Runner(支持裸机、Docker、Kubernetes)。
  • 生态联动:通过WebhooksAPI对接JIRA、Slack、Harbor等;也可与Jenkins协同。
  • 运行形态:选择Linux包(Omnibus)Docker或**Kubernetes(Helm)**部署,按规模与运维偏好决定。

二 身份与单点登录集成

  • LDAP/AD集成(Omnibus示例)

    1. 编辑配置文件:/etc/gitlab/gitlab.rb
    gitlab_rails['ldap_enabled'] = true
    gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
    main:
      label: 'LDAP'
      host: 'ldap.example.com'
      port: 389
      uid: 'sAMAccountName'
      bind_dn: 'CN=ldapuser,OU=IT,OU=People,DC=example,DC=com'
      password: 'yourpassword'
      encryption: 'plain'  # 或 start_tls / tls
      base: 'OU=People,DC=example,DC=com'
      user_filter: 'memberOf=CN=gitlabuser,OU=Groups,OU=People,DC=example,DC=com'
      allow_username_or_email_login: true
      lowercase_usernames: true
      block_auto_created_users: false
    EOS
    
    1. 使配置生效:sudo gitlab-ctl reconfigure
    2. 连通性与账号校验:ldapsearch 测试;GitLab内执行:sudo gitlab-rake gitlab:ldap:check
    3. 登录验证:Web登录选择LDAP方式。
  • Kerberos集成(仅EE)

    1. 准备服务主体与keytab:创建HTTP/gitlab.example.com@EXAMPLE.COM,导出为**/etc/http.keytab**,权限设为git:600。
    2. Omnibus配置:
    gitlab_rails['omniauth_allow_single_sign_on'] = ['kerberos']
    gitlab_rails['kerberos_enabled'] = true
    gitlab_rails['kerberos_keytab'] = "/etc/http.keytab"
    # 如需兼容老版本Git的HTTP协商,启用专用端口
    gitlab_rails['kerberos_use_dedicated_port'] = true
    gitlab_rails['kerberos_port'] = 8443
    gitlab_rails['kerberos_https'] = true
    
    1. 重启:sudo gitlab-ctl reconfigure
    2. 客户端使用:git remote set-url origin https://gitlab.example.com:8443/group/project.git
    3. 重要限制:GitLab CI/CD默认不与启用Kerberos的实例协作,除非使用上述专用端口方式。

三 CI/CD与Runner集成

  • Runner部署与注册
    • Linux包安装Runner(示例):
      • Debian/Ubuntu:curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash sudo apt-get install gitlab-runner
      • RHEL/CentOS:curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash sudo yum install gitlab-runner
    • 注册到项目/群组/实例:gitlab-runner register(填写GitLab地址Registration Token
    • 在项目中放置**.gitlab-ci.yml**定义流程(示例):
    stages:
      - build
      - test
      - deploy
    build:
      stage: build
      script:
        - mvn clean package
    test:
      stage: test
      script:
        - mvn test
    deploy:
      stage: deploy
      script:
        - scp target/*.jar user@server:/opt/app
      only:
        - master
    
    • 如需在Kubernetes中弹性伸缩Runner,可使用Kubernetes ExecutorHelm部署。

四 生态联动与API

  • Webhooks:在项目Settings → Webhooks配置事件回调(如push、merge request),对接JIRA、Slack、Harbor等实现自动流转与通知。
  • API:使用Personal Access TokenOAuth2调用GitLab API进行用户、项目、Runner、流水线等的自动化管理。
  • 与Jenkins协同:可用GitLab作为代码源,通过Webhook触发Jenkins Job,实现混合流水线。

五 部署形态与网络要点

  • Docker运行要点
    • 数据持久化:设置环境变量GITLAB_HOME(如**/srv/gitlab**),映射config/logs/data卷。
    • 端口发布:常规为80/443/22;启用Kerberos时需额外发布8443:8443
    • 启动示例:
      export GITLAB_HOME=/srv/gitlab
      sudo docker run --detach \
        --hostname gitlab.example.com \
        --publish 443:443 --publish 80:80 --publish 22:22 --publish 8443:8443 \
        --name gitlab \
        --restart always \
        --volume $GITLAB_HOME/config:/etc/gitlab \
        --volume $GITLAB_HOME/logs:/var/log/gitlab \
        --volume $GITLAB_HOME/data:/var/opt/gitlab \
        --shm-size 256m \
        registry.gitlab.cn/omnibus/gitlab-jh:latest
      
  • 常用运维命令
    • 重新配置:sudo gitlab-ctl reconfigure
    • 启停与状态:sudo gitlab-ctl start|stop|status
    • 日志排查:sudo gitlab-ctl tail
    • 防火墙:例如firewalld放行https(或对应端口)

0