Task 任务自动化工具教程

Task(又称 go-task)是一款用 Go 语言编写的现代化任务运行器和构建工具,使用 YAML 格式的 Taskfile 定义任务。它是 GNU Make 的简洁替代方案,语法更加直观,支持变量、条件执行、任务依赖、并行运行和文件监控等功能。Task 是单个二进制文件,无需任何依赖,非常适合在搬瓦工 VPS 上管理各种自动化任务。

一、安装 Task

1.1 一键安装脚本

sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin

1.2 使用 Go 安装

go install github.com/go-task/task/v3/cmd/task@latest

1.3 手动下载

wget https://github.com/go-task/task/releases/latest/download/task_linux_amd64.tar.gz
tar -xzf task_linux_amd64.tar.gz
mv task /usr/local/bin/
chmod +x /usr/local/bin/task
rm task_linux_amd64.tar.gz

验证安装:

task --version

二、创建 Taskfile

在项目根目录创建 Taskfile.yml 文件:

version: '3'

tasks:
  default:
    desc: 显示帮助信息
    cmds:
      - task --list

  build:
    desc: 编译项目
    cmds:
      - go build -o bin/app ./cmd/app
    sources:
      - ./**/*.go
    generates:
      - bin/app

  test:
    desc: 运行测试
    cmds:
      - go test -v ./...

  clean:
    desc: 清理构建产物
    cmds:
      - rm -rf bin/

2.1 运行任务

# 列出所有任务
task --list

# 运行默认任务
task

# 运行指定任务
task build
task test
task clean

三、变量和环境变量

version: '3'

vars:
  APP_NAME: myapp
  VERSION:
    sh: git describe --tags --always 2>/dev/null || echo "dev"
  BUILD_TIME:
    sh: date -u '+%Y-%m-%dT%H:%M:%SZ'

env:
  CGO_ENABLED: "0"

tasks:
  build:
    desc: "编译 {{.APP_NAME}} {{.VERSION}}"
    cmds:
      - go build -ldflags "-X main.version={{.VERSION}} -X main.buildTime={{.BUILD_TIME}}" -o bin/{{.APP_NAME}} ./cmd/app

  info:
    desc: 显示构建信息
    cmds:
      - echo "App:{{.APP_NAME}} Version:{{.VERSION}}"

四、任务依赖

version: '3'

tasks:
  generate:
    desc: 生成代码
    cmds:
      - go generate ./...

  build:
    desc: 编译项目
    deps: [generate]
    cmds:
      - go build -o bin/app ./cmd/app

  deploy:
    desc: 部署应用
    deps: [build, test]
    cmds:
      - echo "Deploying..."
      - scp bin/app user@server:/opt/app/

  test:
    desc: 运行测试
    cmds:
      - go test ./...

五、条件执行和文件检测

version: '3'

tasks:
  install-deps:
    desc: 安装依赖(仅在需要时)
    cmds:
      - npm install
    sources:
      - package.json
      - package-lock.json
    generates:
      - node_modules/**/*
    status:
      - test -d node_modules

  build:
    desc: 构建项目(仅在源码变更时)
    deps: [install-deps]
    cmds:
      - npm run build
    sources:
      - src/**/*
    generates:
      - dist/**/*

  lint:
    desc: 代码检查(仅在 Linux 上)
    cmds:
      - golangci-lint run
    platforms: [linux]

六、并行任务

version: '3'

tasks:
  ci:
    desc: 运行完整 CI 流水线
    deps:
      - task: lint
      - task: test
      - task: build

  lint:
    cmds:
      - golangci-lint run

  test:
    cmds:
      - go test -race ./...

  build:
    cmds:
      - go build -o bin/app ./cmd/app

deps 中的任务默认并行执行。如需顺序执行,使用 cmds 中的 task 调用。

七、包含其他 Taskfile

version: '3'

includes:
  docker:
    taskfile: ./taskfiles/Docker.yml
    dir: .
  db:
    taskfile: ./taskfiles/Database.yml
    dir: .

taskfiles/Docker.yml

version: '3'

tasks:
  build:
    desc: 构建 Docker 镜像
    cmds:
      - docker build -t myapp:latest .

  push:
    desc: 推送 Docker 镜像
    cmds:
      - docker push myapp:latest

  up:
    desc: 启动容器
    cmds:
      - docker compose up -d

  down:
    desc: 停止容器
    cmds:
      - docker compose down
# 使用命名空间调用
task docker:build
task docker:push
task db:migrate

八、文件监控

version: '3'

tasks:
  dev:
    desc: 开发模式(文件变更自动重建)
    watch: true
    sources:
      - ./**/*.go
    cmds:
      - go build -o bin/app ./cmd/app
      - bin/app
# 启动监控模式
task dev --watch

九、实际应用示例

一个完整的 Web 项目 Taskfile:

version: '3'

vars:
  APP_NAME: webapp
  DOCKER_IMAGE: registry.your-domain.com/webapp

tasks:
  default:
    cmds:
      - task --list

  setup:
    desc: 初始化开发环境
    cmds:
      - go mod download
      - npm install
      - cp .env.example .env

  dev:
    desc: 启动开发服务器
    cmds:
      - air -c .air.toml

  build:
    desc: 构建生产版本
    cmds:
      - npm run build
      - go build -o bin/{{.APP_NAME}} ./cmd/server

  test:
    desc: 运行所有测试
    cmds:
      - go test -race -coverprofile=coverage.out ./...
      - npm test

  docker:
    desc: 构建 Docker 镜像
    cmds:
      - docker build -t {{.DOCKER_IMAGE}}:latest .

  deploy:
    desc: 部署到生产环境
    deps: [test, docker]
    cmds:
      - docker push {{.DOCKER_IMAGE}}:latest
      - ssh deploy@server "cd /opt/webapp && docker compose pull && docker compose up -d"

  clean:
    desc: 清理所有构建产物
    cmds:
      - rm -rf bin/ dist/ coverage.out node_modules/

十、常见问题

任务未检测到文件变更

确保 sourcesgenerates 的 glob 模式正确。使用 task --force 强制执行。

变量未替换

YAML 中使用 {{.VAR_NAME}} 引用变量,注意双花括号和点号前缀。

总结

Task 是一款简洁而强大的任务自动化工具,其 YAML 语法比 Makefile 更加友好,单文件二进制部署又极为方便。无论是 Go 项目还是其他语言的项目,Task 都能胜任构建、测试和部署自动化的需求。在搬瓦工 VPS 上下载即可使用。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 折扣。相关工具:Mage Go 构建工具

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。