持续集成
你可以在持续集成环境中使用 Mise 来为项目所需的工具提供环境。 我们建议你的项目将工具固定到特定版本,以确保环境可复现。
任何 CI 提供商
持续集成流水线允许运行任意命令。你可以利用这一点安装 Mise,并运行 mise install 来安装工具:
script: |
curl https://mise.run | sh
mise install为了确保你运行的是由 Mise 安装的工具版本,请务必通过 mise x 命令来执行它们:
script: |
mise x -- npm test或者,如果 CI 提供商允许,你可以将 shims 目录添加到你的 PATH 中。
引导
除了调用 curl https://mise.run | sh,还可以使用 mise generate install-script 生成一个运行并安装 mise 的脚本
mise generate install-script -l -w将 .mise/ 添加到你的 .gitignore 中,并提交生成的 ./bin/mise 文件。现在你可以直接在 CI 中使用 ./bin/mise 来安装和运行 mise。
script: |
./bin/mise install
./bin/mise x -- npm test默认情况下,生成的脚本会安装生成该脚本时所使用的版本,但它会遵循与安装脚本相同的 MISE_VERSION 和 MISE_INSTALL_PATH 变量。显式指定的 MISE_INSTALL_PATH 始终按原样使用;否则,MISE_VERSION 还会选择数据目录下按版本标识的默认路径(~/.local/share/mise/bootstrap/),因此在 CI 中升级它会安装请求的版本,而不是复用首次安装的版本。这是非本地化包装器:本地化包装器会将其二进制文件保存在本地化数据目录中(默认为 .mise/)。旧版 mise 生成的包装器会在 Unix 上将该二进制文件放入缓存目录,而旧版 Windows 启动器会将其直接放在 %LOCALAPPDATA%\mise 下;该包装器会继续运行那里已有的文件,而不是重新下载
针对不受信任的配置运行(安全模式)
当作业从其无法控制的配置中解析工具版本时——最常见的情况是,某个机器人在拉取请求分支上刷新 mise.lock——请设置 MISE_SAFE=1,这样项目配置就无法执行代码。在安全模式下,mise 会拒绝(报错,绝不会静默回退)运行模板 exec()/read_file()、_.source 脚本、钩子、任务、asdf 插件脚本或安装插件,同时基于 HTTP 的后端仍可继续进行版本解析。
script: |
MISE_SAFE=1 mise lock --bump --json请参阅安全模式,了解完整的允许和不允许操作列表。
GitHub Actions
如果你使用 GitHub Actions,我们提供了一个 mise-action,用于封装 Mise 以及各工具的安装。你只需要将该 action 添加到你的工作流中:
name: test
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: jdx/mise-action@v3
with:
version: 2024.12.14 # [default: latest] 要安装的 mise 版本
install: true # [default: true] 运行 `mise install`
cache: true # [default: true] 使用 GitHub 的缓存缓存 mise
experimental: true # [default: false] 启用实验性功能
# 自动写入这个 mise.toml 文件
mise_toml: |
[tools]
shellcheck = "0.9.0"
# 或者,如果你更喜欢 .tool-versions:
tool_versions: |
shellcheck 0.9.0
- run: shellcheck scripts/*.shGitLab CI
你可以使用任何安装了 mise 的 Docker 镜像来运行你的 CI 作业。 下面是一个使用 debian-slim 作为基础镜像的示例:
示例 Dockerfile
FROM debian:12-slim
RUN apt-get update \
&& apt-get -y --no-install-recommends install \
# 安装你需要的任何工具
sudo curl git ca-certificates build-essential \
&& rm -rf /var/lib/apt/lists/*
RUN curl https://mise.run | MISE_VERSION=v... MISE_INSTALL_PATH=/usr/local/bin/mise sh在配置作业时,你可以缓存一些 Mise 目录。
build-job:
stage: build
image: mise-debian-slim # 使用你创建的镜像
variables:
MISE_DATA_DIR: $CI_PROJECT_DIR/.mise/mise-data
cache:
- key:
prefix: mise-
files: ["mise.toml", "mise.lock"] # mise.lock 是可选的,仅当使用 `lockfile = true` 时需要
paths:
- $MISE_DATA_DIR
script:
- mise install
- mise exec --command 'npm build'使用 bootstrap 脚本的示例
另一种方式是使用 mise generate install-script,在 GitLab CI 上轻松引导 mise
mise generate install-script -l -w你现在可以使用一个通用的 Docker 镜像,例如下面这个,在 CI 中运行并安装 mise。
示例 Dockerfile
FROM debian:12-slim
RUN apt-get update \
&& apt-get -y --no-install-recommends install sudo curl git ca-certificates build-essential \
&& rm -rf /var/lib/apt/lists/*下面是一个 .gitlab-ci.yml 文件示例:
.mise-cache: &mise-cache
key:
prefix: mise-
files: ["mise.toml", "./bin/mise"]
paths:
- .mise/installs
- .mise/mise-2025.1.3
build-job:
stage: build
image: my-debian-slim-image # 使用你创建的镜像
cache:
- <<: *mise-cache
policy: pull-push
script:
- ./bin/mise install
- ./bin/mise exec --command 'npm build'Xcode Cloud
如果你正在使用 Xcode Cloud,你可以使用自定义的 ci_post_clone.sh 构建脚本 来安装 Mise。下面是一个示例:
#!/bin/sh
curl https://mise.run | sh
export PATH="$HOME/.local/bin:$PATH"
mise install # 安装 mise.toml 中的工具
eval "$(mise activate bash --shims)" # 将已激活的工具添加到 $PATH
swiftlint {args}