简介

Renovate 自动升级依赖学习笔记。

安装

  • 官方提供 cli、docker、安装应用(Github)、克隆项目(Gitlab)等方法注册服务
  • 此文章介绍通过克隆项目 renovate-runner 注册 Gitlab 私有库依赖自动升级服务

Github

Gitlab

1、下载项目: https://gitlab.com/renovate-bot/renovate-runner

2、上传到私有 Gitlab 仓库 renovate-runner

配置 CICD 变量

  • renovate-runner 仓库添加以下 CICD 变量

RENOVATE_TOKEN

GITHUB_COM_TOKEN

RENOVATE_EXTRA_FLAGS

--autodiscover=true --autodiscover-filter=yunaichun/project --onboarding=true

autodiscover: 有 renovate.json 文件的项目会自动升级

autodiscover-filter: 有 renovate.json 文件的项目,但是指定了具体的项目文件名 (多个用空格分割)

onboarding: 每次 mr 提交面板都有详细的信息

RENOVATE_BINARY_SOURCE

1、设置为 global: 为 docker 安装指定的工具

2、否则会流水线会报错: https://docs.renovatebot.com/self-hosted-configuration/#binarysource

配置 GitLab yml 文件

  • renovate-runner 修改根目录 .gitlab.yml 文件
include:
  - project: "yunaichun/renovate-runner"
    file: "/templates/renovate-dind.gitlab-ci.yml"

renovate:
  tags:
    - yourlocagitlabrunnertab
  before_script:
    - EXPO_DEBUG=true
    - npm config set registry yourlocalnpm
  rules:
    - if: '$CI_PIPELINE_SOURCE == "schedule"'
    - if: '$CI_PIPELINE_SOURCE == "push"'

配置 GitLab CICD 定时任务

  • renovate-runner 修改 CICD 定时任务
Description: every day

Interval Pattern: 0 2 * * *

Cron Timezone: Beijing

Target Branch: master

Activated: true

配置 renovate.json

自动合并

platformAutomerge: 是否会自动合并

automergeType: 可选 pr 配合 ignoreTests 为 true 无需等待测试自动合并

ignoreTests: 没有测试但仍希望 Renovate 自动合并 pr

assignees: 每次 pr 发起人的信息

commitMessageSuffix: 自动合并的时候会有一次 commit 提交,最后的 msg
{
  "platformAutomerge": true,
  "automergeType": "pr",
  "ignoreTests": true,
  "assignees": ["yunaichun@qingting.fm"],
  "commitMessageSuffix": "[skip ci]"
}

updateInternalDeps

monorepo 仓库使用: 更新依赖的 npm 包
{
  "updateInternalDeps": true
}

rebaseWhen

baseBranches: 向哪个分支发送 pr

rebaseWhen: 假如合并的时候有冲突,先 rebase 同步 master 再提交 pr
{
  "baseBranches": ["master"],
  "rebaseWhen": "conflicted"
}

postUpgradeTasks

commands: 代表自动 merge 之前 (commit 代码之前) 执行的命令

fileFilters: 会 commit 进来的文件

executionMode: branch-每个分支的 pr 都会执行 commands; update-统一批次的只会执行一次 commands
{
  "postUpgradeTasks": {
    "commands": [
      "cd common/autoinstallers/rush-commit-check && pnpm install && cd ../../../",
      "rush update"
    ],
    "fileFilters": ["**/pnpm-lock.yaml", "**/repo-state.json"],
    "executionMode": "branch"
  }
}

packageRules

matchPackageNames: 精确匹配的 npm 包名称

matchPackagePatterns: 模糊匹配上的 npm 包名称

excludePackagePatterns: 排除匹配的 npm 包名称

matchUpdateTypes: major, minor, patch, pin, pinDigest

matchSourceUrlPrefixes + groupName: 针对同一组织,非 monorepo 仓库,保持这一类下的包版本一致(如果是 monorepo 的仓库则不用配置)

automerge: 设置之后会自动合并,外部如果设置了 platformAutomerge 则不用设置了
{
  "packageRules": [
    /** 所有版本均会自动合并: 内部包、prettier、测试 */
    {
      "matchPackagePatterns": ["^@qt-", "^@testing-", "^prettier"],
      "excludePackagePatterns": ["@testing-library/react"],
      "automerge": true
    },
    /** 除了大版本会自动合并: webpack、rollup、eslint、babel */
    {
      "matchPackageNames": ["webpack", "webpack-cli", "react-scripts"],
      "matchPackagePatterns": [
        "^eslint",
        "^@babel",
        "-loader$",
        "^@rollup",
        "^rollup"
      ],
      "matchUpdateTypes": ["minor", "patch", "pin", "digest"],
      "automerge": true
    },
    /** 其余所有包小版本会自动合并 */
    {
      "excludePackagePatterns": ["^@microsoft", "typedoc"],
      "matchUpdateTypes": ["patch", "pin", "digest"],
      "automerge": true
    },
    /** webpack 有很多包但不是 monorepo 仓库,保持此类所有包版本一致 */
    {
      "matchUpdateTypes": ["patch", "pin", "digest"],
      "matchSourceUrlPrefixes": ["https://github.com/webpack-contrib"],
      "groupName": "webpack-contrib",
      "automerge": true
    },
    /** taro 已经改为 monorepo 了,此规则可以删除 */
    {
      "matchUpdateTypes": ["patch", "pin", "digest"],
      "matchSourceUrlPrefixes": ["https://github.com/NervJS/taro"],
      "groupName": "tarojs monorepo",
      "automerge": true
    }
  ]
}
powered by Gitbook该文件修订时间: 2023-05-16 18:08:03

results matching ""

    No results matching ""