• Gitlab部署
    • 预备知识
    • 仓库设置
    • 添加choerodon chart仓库并同步
    • 部署Gitlab
      • 部署数据库
      • 部署gitlab所需Redis
      • 创建gitlab所需PV和PVC
      • 部署gitlab
      • 验证部署
    • 启用SSH协议
      • 修改Gitlab SSH Service
      • 验证是否启用成功
    • 配置Choerodon Oauth认证
      • 更新Gitlab配置
      • 添加Gitlab Client
      • 添加管理员用户关联
      • 验证更新

    Gitlab部署

    预备知识

    如果你不知道Gitlab是做什么的,那么请参考下面链接(包括但不限于)进行学习:

    • Gitlab

    仓库设置

    添加choerodon chart仓库并同步

    1. helm repo add c7n https://openchart.choerodon.com.cn/choerodon/c7n/
    2. helm repo update

    部署Gitlab

    部署数据库

    注意:本 PostgreSql 数据库搭建教程仅为快速体验Gitlab而编写,由于使用了NFS存储故并不能保证其稳定运行或数据不丢失,您可以参照 PostgreSql 官网进行搭建。
    使用PostgreSql数据库



    1. helm install c7n/postgresql \
      set persistence.enabled=true \
      set persistence.storageClass=nfs-provisioner \
      set image.tag=9.6.11 \
      set postgresqlPassword=password \
      set postgresqlDatabase=gitlabhq_production \
      set initdbScripts.'init.sql'='
      \c gitlabhq_production;
      CREATE EXTENSION IF NOT EXISTS pg_trgm;' \
      version 3.18.4 \
      name gitlab-postgresql \
      namespace c7n-system



    使用MySql数据库



    1. helm install c7n/persistentvolumeclaim \
      set accessModes={ReadWriteOnce} \
      set requests.storage=2Gi \
      set storageClassName=nfs-provisioner \
      version 0.1.0 \
      name gitlab-mysql-pvc \
      namespace c7n-system



    1. helm install c7n/mysql \
      set persistence.enabled=true \
      set persistence.existingClaim=gitlab-mysql-pvc \
      set env.MYSQL_ROOT_PASSWORD=password \
      set env.MYSQL_DATABASE=gitlabhq_production \
      set config.innodb_large_prefix=1 \
      set config.innodb_file_per_table=1 \
      set config.log_bin_trust_function_creators=1 \
      set config.character_set_server=utf8mb4 \
      set config.collation_server=utf8mb4_general_ci \
      set service.enabled=ture \
      version 0.1.0 \
      name gitlab-mysql \
      namespace c7n-system



    部署gitlab所需Redis

    1. helm install c7n/persistentvolumeclaim \
    2. --set accessModes={ReadWriteOnce} \
    3. --set requests.storage=256Mi \
    4. --set storageClassName=nfs-provisioner \
    5. --version 0.1.0 \
    6. --name gitlab-redis-pvc \
    7. --namespace c7n-system
    1. helm install c7n/redis \
    2. --set persistence.enabled=true \
    3. --set persistence.existingClaim=gitlab-redis-pvc \
    4. --set service.enabled=true \
    5. --version 0.2.0 \
    6. --name gitlab-redis \
    7. --namespace c7n-system

    创建gitlab所需PV和PVC

    1. helm install c7n/persistentvolumeclaim \
    2. --set accessModes={ReadWriteOnce} \
    3. --set requests.storage=2Gi \
    4. --set storageClassName=nfs-provisioner \
    5. --version 0.1.0 \
    6. --name gitlab-pvc \
    7. --namespace c7n-system

    部署gitlab

    使用PostgreSql数据库



    1. helm install c7n/gitlab \
      set persistence.enabled=true \
      set persistence.existingClaim=gitlab-pvc \
      set env.config.GITLAB_EXTERNAL_URL=http://gitlab.example.choerodon.io \
      set env.config.GITLAB_TIMEZONE=Asia/Shanghai \
      set env.config.CHOERODON_OMNIAUTH_ENABLED=false \
      set env.config.GITLAB_DEFAULT_CAN_CREATE_GROUP=true \
      set env.config.DB_ADAPTER=postgresql \
      set env.config.DB_HOST=gitlab-postgresql-postgresql.c7n-system.svc \
      set env.config.DB_PORT=5432 \
      set env.config.DB_USERNAME=postgres \
      set env.config.DB_PASSWORD=password \
      set env.config.DB_DATABASE=gitlabhq_production \
      set env.config.REDIS_HOST=gitlab-redis.c7n-system.svc \
      set env.config.SMTP_ENABLE=false \
      set env.config.SMTP_ADDRESS=smtp.mxhichina.com \
      set env.config.SMTP_PORT=465 \
      set env.config.SMTP_USER_NAME=git.sys@example.choerodon.io \
      set env.config.SMTP_PASSWORD=password \
      set env.config.SMTP_DOMAIN=smtp.mxhichina.com \
      set env.config.SMTP_AUTHENTICATION=login \
      set env.config.GITLAB_EMAIL_FROM=git.sys@example.choerodon.io \
      set env.config.SMTP_ENABLE_STARTTLS_AUTO=true \
      set env.config.SMTP_TLS=true \
      set env.config.PROMETHEUS_ENABLE=false \
      set env.config.NODE_EXPORTER_ENABLE=false \
      set env.config.UNICORN_WORKERS=3 \
      set env.config.UNICORN_TIMEOUT=60 \
      set service.enabled=true \
      set ingress.enabled=true \
      version 0.4.1 \
      name gitlab \
      namespace c7n-system



    使用MySql数据库



    1. helm install c7n/gitlab \
      set persistence.enabled=true \
      set persistence.existingClaim=gitlab-pvc \
      set env.config.GITLAB_EXTERNAL_URL=http://gitlab.example.choerodon.io \
      set env.config.GITLAB_TIMEZONE=Asia/Shanghai \
      set env.config.CHOERODON_OMNIAUTH_ENABLED=false \
      set env.config.GITLAB_DEFAULT_CAN_CREATE_GROUP=true \
      set env.config.DB_ADAPTER=mysql2 \
      set env.config.DB_HOST=gitlab-mysql.c7n-system.svc \
      set env.config.DB_PORT=3306 \
      set env.config.DB_USERNAME=root \
      set env.config.DB_PASSWORD=password \
      set env.config.DB_DATABASE=gitlabhq_production \
      set env.config.REDIS_HOST=gitlab-redis.c7n-system.svc \
      set env.config.SMTP_ENABLE=false \
      set env.config.SMTP_ADDRESS=smtp.mxhichina.com \
      set env.config.SMTP_PORT=465 \
      set env.config.SMTP_USER_NAME=git.sys@example.choerodon.io \
      set env.config.SMTP_PASSWORD=password \
      set env.config.SMTP_DOMAIN=smtp.mxhichina.com \
      set env.config.SMTP_AUTHENTICATION=login \
      set env.config.GITLAB_EMAIL_FROM=git.sys@example.choerodon.io \
      set env.config.SMTP_ENABLE_STARTTLS_AUTO=true \
      set env.config.SMTP_TLS=true \
      set env.config.PROMETHEUS_ENABLE=false \
      set env.config.NODE_EXPORTER_ENABLE=false \
      set env.config.UNICORN_WORKERS=3 \
      set env.config.UNICORN_TIMEOUT=60 \
      set service.enabled=true \
      set ingress.enabled=true \
      version 0.4.1 \
      name gitlab \
      namespace c7n-system



    • 参数

    参数含义persistence.enabled是否启用持久化存储persistence.existingClaimPVC的名称env.config.GITLAB_EXTERNAL_URLgitlab的域名env.config.GITLAB_TIMEZONE时区env.config.GITLAB_DEFAULT_CAN_CREATE_GROUP用户是否可以创建组env.config.CHOERODON_OMNIAUTH_ENABLED是否开启第三方认证env.config.OMNIAUTH_BLOCK_AUTO_CREATED_USERS是否自动创建用户env.config.CHOERODON_API_URLchoerodon的Api地址env.config.CHOERODON_CLIENT_ID在choerodon上申请的client idenv.config.DB_ADAPTER数据库类型env.config.DB_HOST数据库地址env.config.DB_PORT数据库端口号env.config.DB_USERNAME数据库用户名env.config.DB_PASSWORD数据库用户密码env.config.REDIS_HOSTredis地址env.config.REDIS_PORTredis端口号env.config.SMTP_ENABLE是否开启smtp,若为false,以下SMTP参数都不生效env.config.SMTP_ADDRESSsmtp地址env.config.SMTP_PORTsmtp端口号env.config.SMTP_USER_NAMEstmp用户env.config.SMTP_PASSWORDstmp用户密码env.config.SMTP_DOMAINsmtp地址env.config.SMTP_AUTHENTICATION认证方式env.config.GITLAB_EMAIL_FROM设置发件人emailenv.config.SMTP_ENABLE_STARTTLS_AUTO是否自动启用TLSenv.config.SMTP_TLS是否启用TLSenv.config.PROMETHEUS_ENABLE是否开启prometheusenv.config.NODE_EXPORTER_ENABLE是否开启node_exporter_enableenv.config.UNICORN_WORKERSunicorn workers的数量env.config.UNICORN_TIMEOUT设置unicorn workers进程的超时时间,单位秒ingress.enabled是否开启ingressservice.enabled是否开启service

    验证部署

    • 访问设置的Gitlab域名出现以下界面即部署成功

    Gitlab部署  - 图1

    启用SSH协议

    必须开启SSH协议功能

    修改Gitlab SSH Service

    • 在Master节点编辑gitlab-sshService
    1. kubectl edit svc -n c7n-system gitlab-ssh
    • 按下面提示进行修改
    1. apiVersion: v1
    2. kind: Service
    3. metadata:
    4. name: gitlab-ssh
    5. namespace: c7n-system
    6. labels:
    7. choerodon.io/release: "gitlab"
    8. choerodon.io/infra: "gitlab"
    9. spec:
    10. type: ClusterIP
    11. externalIPs: #请添加externalIPs属性
    12. - 192.168.1.1 #填写Gitlab域名指向的主机的内网IP
    13. ports:
    14. - port: 2289
    15. targetPort: ssh
    16. selector:
    17. choerodon.io/release: "gitlab"
    18. choerodon.io/infra: "gitlab"
    如果您启用了防火墙iptables或者安全组,那么必须添加新开的2289端口

    验证是否启用成功

    • 在Master节点执行
    1. kubectl get svc -n c7n-system gitlab-ssh

    出现类似内容即说明启用成功。

    1. NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    2. gitlab gitlab-ssh ClusterIP 10.233.12.57 192.168.1.1 2289/TCP 1d

    配置Choerodon Oauth认证

    • 以下操作须将Choerodon搭建完成后再继续进行,若未搭建,请跳过。
    • 配置Choerodon的Oauth认证后Gitlab的root用户是无法再通过Gitlab自有的界面进行登录的了。
    如标题所描述,进行此步配置就是使用Choerodon的Oauth认证进行登陆Gitlab。这是Gitlab与Choerodon进行整合的必要操作。

    更新Gitlab配置

    1. helm upgrade gitlab c7n/gitlab \
    2. -f <(helm get values gitlab) \
    3. --set env.config.CHOERODON_OMNIAUTH_ENABLED=true \
    4. --set env.config.OMNIAUTH_AUTO_SIGN_IN_WITH_PROVIDER=oauth2_generic \
    5. --set env.config.OMNIAUTH_BLOCK_AUTO_CREATED_USERS=false \
    6. --set env.config.CHOERODON_API_URL=http://api.example.choerodon.io \
    7. --set env.config.CHOERODON_CLIENT_ID=gitlab \
    8. --version 0.4.0 \
    9. --namespace c7n-system

    添加Gitlab Client

    • 在执行里面前请根据实际情况修改参数
    • 记得修改http://gitlab.example.choerodon.io的地址为实际的gitlab地址
    1. helm install c7n/mysql-client \
    2. --set env.MYSQL_HOST=c7n-mysql.c7n-system.svc \
    3. --set env.MYSQL_PORT=3306 \
    4. --set env.MYSQL_USER=root \
    5. --set env.MYSQL_PASS=password \
    6. --set env.SQL_SCRIPT="\
    7. INSERT INTO iam_service.oauth_client ( \
    8. name\,organization_id\,resource_ids\,secret\,scope\,\
    9. authorized_grant_types\,web_server_redirect_uri\,\
    10. access_token_validity\,refresh_token_validity\,\
    11. additional_information\,auto_approve\,object_version_number\,\
    12. created_by\,creation_date\,last_updated_by\,last_update_date)\
    13. VALUES('gitlab'\,1\,'default'\,'secret'\,'default'\,\
    14. 'password\,implicit\,client_credentials\,authorization_code\,refresh_token'\,\
    15. 'http://gitlab.example.choerodon.io'\,3600\,3600\,'{}'\,'default'\,1\,0\,NOW()\,0\,NOW());" \
    16. --version 0.1.0 \
    17. --name gitlab-client \
    18. --namespace c7n-system

    添加管理员用户关联

    执行完添加管理员用户关联步骤前请不要去Gitlab界面进行登录操作
    • 执行下面语句进行关联:

    使用PostgreSql数据库

    1. helm install c7n/postgresql-client \
    2. --set env.PG_HOST=gitlab-postgresql-postgresql.c7n-system.svc \
    3. --set env.PG_PORT=5432 \
    4. --set env.PG_USER=postgres \
    5. --set env.PG_PASS=password \
    6. --set env.PG_DBNAME=gitlabhq_production \
    7. --set env.SQL_SCRIPT="\
    8. INSERT INTO identities(extern_uid\, provider\, user_id\, created_at\, updated_at) \
    9. VALUES ('1'\, 'oauth2_generic'\, 1\, NOW()\, NOW());" \
    10. --version 0.1.0 \
    11. --name gitlab-user-identities \
    12. --namespace c7n-system

    使用MySql数据库

    1. helm install c7n/mysql-client \
    2. --set env.MYSQL_HOST=gitlab-mysql.c7n-system.svc \
    3. --set env.MYSQL_PORT=3306 \
    4. --set env.MYSQL_USER=root \
    5. --set env.MYSQL_PASS=password \
    6. --set env.SQL_SCRIPT="\
    7. INSERT INTO gitlabhq_production.identities(extern_uid\, provider\, user_id\, created_at\, updated_at) \
    8. VALUES ('1'\, 'oauth2_generic'\, 1\, NOW()\, NOW());" \
    9. --version 0.1.0 \
    10. --name gitlab-user-identities \
    11. --namespace c7n-system

    验证更新

    • 访问设置的Gitlab域名出现以下界面即更新成功

    Gitlab部署  - 图2