Mill任务如何更新环境变量以使后续运行的任务获取到更新后的值
Mill 环境变量更新操作说明
Mill 客户端默认已经内置了环境变量同步逻辑,你不需要手动实现「向服务端发送环境变量」的开发操作,只要遵循官方规范读取环境变量,就能拿到每次任务执行时的最新值。
Mill为了避免重复类加载的开销,会维持一个长生命周期的JVM服务端进程。因此如果在任务中直接调用System.getenv获取环境变量,拿到的可能不是最新值——因为环境变量只会在服务端启动时初始化,而非客户端每次执行时更新。为了解决这个问题,Mill客户端会将当前读取到的环境变量发送给服务端,服务端会将其封装为Map[String, String]类型,通过Ctx API对外提供。
正确操作步骤
- 禁止在任务代码中直接调用
System.getenv读取环境变量,该方法读取的是Mill服务端启动时的静态环境变量值,不会随后续客户端执行请求更新。 - 统一通过
T.ctx.envAPI读取环境变量,这里存储的就是每次执行任务时,客户端自动同步给服务端的最新环境变量集合,代码示例如下:
def envVar = T.input { T.ctx.env.get("ENV_VAR") }
你每次在当前终端会话修改完环境变量(例如执行export ENV_VAR=新值)后,直接执行对应mill任务命令即可,客户端会自动把当前最新的环境变量全量同步给服务端,服务端会自动更新T.ctx.env的取值,无需手动重启Mill后台服务。
内容的提问来源于stack exchange,提问作者user4955663
相关产品推荐
相关产品推荐

