{"_id":"@arkxos/choerodon-code-repo","_rev":"2-797b303a27959cc27b5c85b4b9a47b8b","name":"@arkxos/choerodon-code-repo","dist-tags":{"latest":"2.0.1"},"versions":{"2.0.1":{"name":"@arkxos/choerodon-code-repo","version":"2.0.1","license":"ISC","_id":"@arkxos/choerodon-code-repo@2.0.1","maintainers":[{"name":"arkxos","email":"arkxos@qq.com"}],"contributors":[{"name":"choerodon"}],"dist":{"shasum":"e03ecab3c0cf1070678a145d9aa6db43362471e1","tarball":"https://registry.npmjs.org/@arkxos/choerodon-code-repo/-/choerodon-code-repo-2.0.1.tgz","fileCount":207,"integrity":"sha512-SBzPKvTmbntV4DGpViorOwWsDEwnSNk81GyQ8c6mOU03qcCtiMbpyPkvSDHzFJzbltAshMoH57LIi1JoSZvxzA==","signatures":[{"sig":"MEUCIQCrTlr49RTbqFHjZ7cp7nSnXYADFpVnRGgUa5XTwb0jDgIgIiC13RqHmwClFvpUBLBEPW2lBC7iJwTAxWU637jwoCA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":851419},"main":"./lib/index.js","husky":{"hooks":{"pre-commit":"lint-staged"}},"gitHead":"c6e4d109e9d4c9ad8e0f00ff4cc2a968d7ccd08b","scripts":{"dist":"choerodon-front-boot dist --config ./react/config.js","clean":"rm -rf node_modules && rm package-lock.json","start":"choerodon-front-boot start --config ./react/config.js","compile":"choerodon-front-boot compile","lint-staged":"lint-staged","lint-staged:es":"eslint"},"_npmUser":{"name":"arkxos","email":"arkxos@qq.com"},"routeName":"rducm","_npmVersion":"10.8.2","description":"简体中文 | [English](./README.en_US.md)","directories":{},"lint-staged":{"react/**/*.scss":"stylelint --syntax scss","react/**/*.{js,jsx}":["npm run lint-staged:es"]},"resolutions":{"react":"16.14.0","react-dom":"16.14.0"},"_nodeVersion":"20.19.0","dependencies":{"moment":"^2.24.0","react-quill":"^1.3.0","timeago-react":"^3.0.0","mobx-react-lite":"^1.4.1","react-copy-to-clipboard":"^5.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^4.14.0","lodash":"latest","babel-eslint":"8.2.6","babel-preset-c7n":"^0.0.2","eslint-plugin-react":"^7.1.0","eslint-config-airbnb":"^16.1.0","eslint-plugin-compat":"^2.1.0","eslint-plugin-import":"^2.8.0","eslint-config-c7n-app":"^0.0.1","@arkxos/choerodon-boot":"1.2.1","eslint-config-prettier":"^2.9.0","eslint-plugin-jsx-a11y":"^5.1.1","eslint-plugin-markdown":"^1.0.0-beta.6","@arkxos/choerodon-master":"1.4.2","eslint-plugin-react-hooks":"^2.3.0"},"_npmOperationalInternal":{"tmp":"tmp/choerodon-code-repo_2.0.1_1763905470209_0.6061755367797406","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-11-23T13:44:30.103Z","modified":"2026-01-08T09:37:26.783Z","2.0.1":"2025-11-23T13:44:30.430Z"},"license":"ISC","description":"简体中文 | [English](./README.en_US.md)","contributors":[{"name":"choerodon"}],"maintainers":[{"email":"arkxos@qq.com","name":"arkxosboot"}],"readme":"简体中文 | [English](./README.en_US.md)\r\n \r\n# code-repo-service\r\n\r\n`code-repo-service` code-repo-service是Choerodon平台的代码库管理服务. 当前版本为: `0.23.0-alpha.1`\r\n\r\ncode-repo-service通过与Gitlab集成, 提供权限管理等功能, 通过在Choerodon平台一站式管理代码库。\r\n\r\n## 特性\r\n`code-repo-service` 含有以下功能:    \r\n\r\n- `权限分配`: 支持查看和分配团队成员的代码库权限\r\n- `权限申请`: 支持向项目管理员申请应用服务的权限\r\n- `权限审计`: 支持定时审计代码库与Gitlab权限不一致的数据, 并支持修复不一致权限\r\n- `安全审计`: 支持查看团队成员的权限分布情况\r\n- `保护分支/标记`: 支持查看和设置保护分支和保护标记, 用于对分支(branches)和标记(tags)的权限进行设置\r\n- `操作日志`: 记录了权限分配的操作日志\r\n- `总览`: 支持查看各应用服务的一些信息\r\n\r\n## 前置要求\r\n- [JAVA](https://www.java.com/en/)：`code-repo-service`基于Java8进行开发\r\n- [GitLab](https://about.gitlab.com/)：`code-repo-service`使用`GitLab`进行代码的托管。同时，通过基于`GitLab Runner`实现持续集成以完成代码编译，单元测试执行，代码质量分析，docker镜像生成，helm chart打包，服务版本发布等自动化过程\r\n- [Harbor](https://vmware.github.io/harbor/cn/)：企业级Docker registry 服务，用于存放服务版本所对应的docker镜像\r\n- [Kubernetes](https://kubernetes.io/)：容器编排管理工具，用于部署服务版本所对应的helm chart包\r\n- [ChartMuseum](https://chartmuseum.com/)：Helm Chart仓库，用于存放服务版本所对应的helm chart包\r\n- [Sonarqube](https://www.sonarqube.org/)：管理代码质量的开放平台，用于管理服务的代码质量\r\n- [MySQL](https://www.mysql.com)：主流数据库之一，用于`code-repo-service`的数据持久化\r\n- [Redis](https://redis.io/)：内存数据库，用于数据缓存和部分非持久化数据存储\r\n\r\n## 服务依赖\r\n\r\n* `choerodon-register`: 注册中心，在线上环境代替本地的`eureka-server`\r\n* `choerodon-iam`: 用户服务，与用户有关的操作依赖与此服务\r\n* `choerodon-gateway`: 网关服务\r\n* `choerodon-oauth`: 授权服务\r\n* `manager-service`: 管理服务\r\n* `choerodon-asgard`: 事务一致性服务\r\n* `notify-service`: 通知服务\r\n* `devops-service`: Devops服务\r\n\r\n## 服务配置\r\n\r\n* `bootstrap.yml`:\r\n\r\n  ```yaml\r\n  server:\r\n    port: 7140\r\n  management:\r\n    server: \r\n      port: 7141\r\n    endpoints:\r\n      web:\r\n        exposure:\r\n          include: '*'\r\n  \r\n  spring:\r\n    profiles:\r\n      active: default\r\n    cloud:\r\n      config:\r\n        fail-fast: false\r\n        # 是否启用配置中心\r\n        enabled: ${SPRING_CLOUD_CONFIG_ENABLED:false}\r\n        # 配置中心地址\r\n        uri: ${SPRING_CLOUD_CONFIG_URI:http://service.example.rapidark.com:8000}\r\n        retry:\r\n          # 最大重试次数\r\n          maxAttempts: 6\r\n          multiplier: 1.1\r\n          # 重试间隔时间\r\n          maxInterval: 2000\r\n        # 标签\r\n        label: ${SPRING_CLOUD_CONFIG_LABEL:}\r\n  \r\n  eureka:\r\n    instance:\r\n      # 以IP注册到注册中心\r\n      preferIpAddress: ${EUREKA_INSTANCE_PREFER_IP_ADDRESS:true}\r\n      leaseRenewalIntervalInSeconds: 10\r\n      leaseExpirationDurationInSeconds: 30\r\n      # 服务的一些元数据信息\r\n      metadata-map:\r\n        VERSION: 1.2.0.RELEASE\r\n    client:\r\n      serviceUrl:\r\n        # 注册中心地址\r\n        defaultZone: ${EUREKA_DEFAULT_ZONE:http://service.example.rapidark.com:8000/eureka}\r\n      registryFetchIntervalSeconds: 10\r\n      disable-delta: true\r\n  ```\r\n\r\n* `application.yml`:\r\n\r\n  ```yaml\r\n  spring:\r\n    application:\r\n      name: code-repo-service\r\n    datasource:\r\n      url: ${SPRING_DATASOURCE_URL:jdbc:mysql://mysql.dev.example.rapidark.com:3306/hzero_platform?useUnicode=true&characterEncoding=utf-8&useSSL=false}\r\n      username:  ${SPRING_DATASOURCE_USERNAME:hzero}\r\n      password: ${SPRING_DATASOURCE_PASSWORD:hzero}\r\n      hikari:\r\n        # 连接池最小空闲连接数\r\n        minimum-idle: ${SPRING_DATASOURCE_MINIMUM_IDLE:5}\r\n        # 连接池允许的最大连接数\r\n        maximum-pool-size: ${SPRING_DATASOURCE_MAXIMUM_POOL_SIZE:200}\r\n        # 等待连接池分配连接的最大时长（毫秒）\r\n        connection-timeout: ${SPRING_DATASOURCE_CONNECTION_TIMEOUT:30000}\r\n    redis:\r\n      host: dev.example.rapidark.com\r\n      port: 6379\r\n      database: 1\r\n      jedis:\r\n        pool:\r\n          # 资源池中最大连接数\r\n          # 默认8，-1表示无限制；可根据服务并发redis情况及服务端的支持上限调整\r\n          max-active: ${SPRING_REDIS_POOL_MAX_ACTIVE:50}\r\n          # 资源池运行最大空闲的连接数\r\n          # 默认8，-1表示无限制；可根据服务并发redis情况及服务端的支持上限调整，一般建议和max-active保持一致，避免资源伸缩带来的开销\r\n          max-idle: ${SPRING_REDIS_POOL_MAX_IDLE:50}\r\n          # 当资源池连接用尽后，调用者的最大等待时间(单位为毫秒)\r\n          # 默认 -1 表示永不超时，设置5秒\r\n          max-wait: ${SPRING_REDIS_POOL_MAX_WAIT:5000}\r\n    resources:\r\n      # 资源缓存时间，单位秒\r\n      cache.period: 3600\r\n      # 开启gzip压缩\r\n      chain.gzipped: true\r\n      # 启用缓存\r\n      chain.cache: true\r\n  \r\n  server: \r\n    undertow:\r\n      # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接\r\n      # 默认值为8，建议设置每个CPU核心一个线程\r\n      io-threads: ${SERVER_UNDERTOW_IO_THREADS:4}\r\n      # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程\r\n      # 默认等于 io-threads*8，它的值设置取决于系统的负载，可适当调大该值\r\n      worker-threads: ${SERVER_UNDERTOW_WORKER_THREADS:128}\r\n      # 每块buffer的空间大小，越小空间被利用越充分\r\n      # 不要设置太大，以免影响其他应用，合适即可\r\n      buffer-size: ${SERVER_UNDERTOW_BUFFER_SIZE:1024}\r\n      # 是否分配的直接内存(NIO直接分配的堆外内存)\r\n      # 默认false\r\n      direct-buffers: true\r\n      # HTTP POST请求最大的大小\r\n      # 默认0，无限制，可设置10M\r\n      max-http-post-size: 10485760\r\n      allow-unescaped-characters-in-url: true\r\n  \r\n  feign:\r\n    hystrix:\r\n      enabled: true\r\n      command:\r\n        default:\r\n          execution:\r\n            isolation:\r\n              thread:\r\n                timeoutInMilliseconds: 30000\r\n  \r\n  hystrix:\r\n    threadpool:\r\n      default:\r\n        # 执行命令线程池的核心线程数，也是命令执行的最大并发量\r\n        # 默认10\r\n        coreSize: 1000\r\n        # 最大执行线程数\r\n        maximumSize: 1000\r\n    command:\r\n      default:\r\n        execution:\r\n          isolation:\r\n            thread:\r\n              # HystrixCommand 执行的超时时间，超时后进入降级处理逻辑。一个接口，理论的最佳响应速度应该在200ms以内，或者慢点的接口就几百毫秒。\r\n              # 默认 1000 毫秒，最高设置 2000足矣。如果超时，首先看能不能优化接口相关业务、SQL查询等，不要盲目加大超时时间，否则会导致线程堆积过多，hystrix 线程池卡死，最终服务不可用。\r\n              timeoutInMilliseconds: ${HYSTRIX_COMMAND_TIMEOUT_IN_MILLISECONDS:40000}\r\n  \r\n  ribbon:\r\n    # 客户端读取超时时间，超时时间要小于Hystrix的超时时间，否则重试机制就无意义了\r\n    ReadTimeout: ${RIBBON_READ_TIMEOUT:30000}\r\n    # 客户端连接超时时间\r\n    ConnectTimeout: ${RIBBON_CONNECT_TIMEOUT:3000}\r\n    # 访问实例失败(超时)，允许自动重试，设置重试次数，失败后会更换实例访问，请一定确保接口的幂等性，否则重试可能导致数据异常。\r\n    OkToRetryOnAllOperations: true\r\n    MaxAutoRetries: 1\r\n    MaxAutoRetriesNextServer: 1\r\n  \r\n  mybatis:\r\n    mapperLocations: classpath*:/mapper/*.xml\r\n    configuration:\r\n      mapUnderscoreToCamelCase: true\r\n  \r\n  \r\n  logging:\r\n    level:\r\n      org.apache.ibatis: debug\r\n      io.choerodon: debug\r\n      org.hzero: debug\r\n  \r\n  choerodon:\r\n    category:\r\n      enabled: true # 是否开启项目/组织类型控制\r\n    devops:\r\n      message: true\r\n    eureka:\r\n      event:\r\n        max-cache-size: 300\r\n        retry-time: 5\r\n        retry-interval: 3\r\n        skip-services: config**, **register-server, **gateway**, zipkin**, hystrix**, oauth**\r\n    saga:\r\n      service: choerodon-asgard\r\n      consumer:\r\n        enabled: false # 启动消费端\r\n        thread-num: 2 # saga消息消费线程池大小\r\n        max-poll-size: 200 # 每次拉取消息最大数量\r\n        poll-interval-ms: 1000 # 拉取间隔，默认1000毫秒\r\n    schedule:\r\n      consumer:\r\n        enabled: false # 启用任务调度消费端\r\n        thread-num: 1 # 任务调度消费线程数\r\n        poll-interval-ms: 1000 # 拉取间隔，默认1000毫秒\r\n    cleanPermission: false\r\n  \r\n  \r\n  gitlab:\r\n    url: ${GITLAB_URL:http://git.example.rapidark.com/}\r\n    privateToken: ${GITLAB_PRIVATE_TOKEN:xxx} # 管理员token\r\n  ```\r\n\r\n\r\n## 安装和启动步骤\r\n\r\n1. 创建数据库`hrds_code_repo`，创建用户`choerodon`，并为用户分配权限：\r\n\r\n   ```sql\r\n   CREATE USER 'choerodon'@'%' IDENTIFIED BY \"choerodon\";\r\n   CREATE DATABASE hrds_code_repo DEFAULT CHARACTER SET utf8;\r\n   GRANT ALL PRIVILEGES ON hrds_code_repo.* TO choerodon@'%';\r\n   FLUSH PRIVILEGES;\r\n   ```\r\n\r\n2. 拉取`code-repo-service`代码到本地：\r\n\r\n   ```sh\r\n   git clone https://github.com/choerodon/code-repo-service.git\r\n   ```\r\n\r\n3. 在项目根目录执行命令： `sh init-database.sh`\r\n\r\n4. 使用下列命令运行或直接在集成环境中运行 `RducmApplication` \r\n\r\n   ```sh\r\n   mvn clean spring-boot:run\r\n   ```\r\n\r\n## 链接\r\n\r\n[更新日志](./CHANGELOG.zh-CN.md)\r\n\r\n## 反馈途径\r\n\r\n如果您发现任何缺陷或bug，请及时 [issue](https://github.com/choerodon/code-repo-service/issues/new)告知我们 。\r\n\r\n## 如何参与\r\n\r\n欢迎参与我们的项目，了解更多有关如何[参与贡献](https://github.com/choerodon/choerodon/blob/master/CONTRIBUTING.md)的信息。 \r\n","readmeFilename":"README.md"}