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/
十、常见问题
任务未检测到文件变更
确保 sources 和 generates 的 glob 模式正确。使用 task --force 强制执行。
变量未替换
YAML 中使用 {{.VAR_NAME}} 引用变量,注意双花括号和点号前缀。
总结
Task 是一款简洁而强大的任务自动化工具,其 YAML 语法比 Makefile 更加友好,单文件二进制部署又极为方便。无论是 Go 项目还是其他语言的项目,Task 都能胜任构建、测试和部署自动化的需求。在搬瓦工 VPS 上下载即可使用。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 折扣。相关工具:Mage Go 构建工具。