在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Taskfile的安裝及使用

馬哥Linux運維 ? 來源:mritd.com ? 作者:mritd.com ? 2022-07-18 16:22 ? 次閱讀

1. Taskfile 是什么

Taskfile 通過 yaml 來描述各種執行任務, 其核心采用 go 編寫; 相較于 Makefile 的 tab 分割和 bash 結合語法 Taskfile 顯得更加現代化和易于使用(雖然會變成 yaml 工程師). Taskfile 內置了動態變量、操作系統等環境變量識別等高級功能都更貼合現代化的 Coding 方式。

總體來說如果你是一個對 Makefile 不太熟悉的人, 又期望通過類似 Makefile 的工具完成一些批量任務, 那么相對于 Makefile 來說 Taskfile 會更加便于入門, 學習曲線更低且速度也足夠快。

2. 安裝及使用

安裝 go-task

對于 mac 用戶來說官方提供了 brew 安裝方式:

$brewinstallgo-task/tap/go-task

對于 Linux 用戶, 官方提供了部分 Linux 發行版的安裝包, 但由于其只有一個二進制文件, 所以官方也提供了快速安裝腳本:

#ForDefaultInstallationto./binwithdebuglogging
$sh-c"$(curl--locationhttps://taskfile.dev/install.sh)"---d

#ForInstallationTo/usr/local/binforuserwideaccesswithdebuglogging
#Mayrequiresudosh
$sh-c"$(curl--locationhttps://taskfile.dev/install.sh)"---d-b/usr/local/bin

如果本地已經有了 Go 語言開發環境也可以直接通過 go 命令安裝:

$goinstallgithub.com/go-task/task/v3/cmd/task@latest

快速開始

安裝完成后, 只需要編寫一個Taskfile.yml的 yaml 文件, 然后就可以通過task命令運行相應的任務:

version:'3'

tasks:
build:
cmds:
-echo"執行build任務"

docker:
cmds:
-echo"打包docker鏡像"
04df1606-0511-11ed-ba43-dac502259ad0.png

如果需要設置默認執行任務, 只需要創建一個名字為default的任務即可:

version:'3'

tasks:
default:
cmds:
-echo"這是默認任務"

build:
cmds:
-echo"執行build任務"

docker:
cmds:
-echo"打包docker鏡像"
04ed2480-0511-11ed-ba43-dac502259ad0.png

3. 進階使用

環境變量

Taskfile 支持引用三種環境變量:

  • Shell 環境變量
  • Taskfile 內定義的環境變量
  • 變量文件內定義的環境變量

如果需要引用 Shell 內的環境變量只需要使用$ 變量名方式直接引用即可:

version:'3'

tasks:
default:
cmds:
-echo"$ABCD"
0517049e-0511-11ed-ba43-dac502259ad0.png

同樣在 Taskfile 內也可以定義環境變量:

version:'3'

env:
TENV2:"t2"#全局環境變量

tasks:
default:
cmds:
-echo"$TENV1"
-echo"$TENV2"
env:
TENV1:"t1"#單個task環境變量
05241b70-0511-11ed-ba43-dac502259ad0.png

除了這種直接引用變量的方式, Taskfile 也支持類似 docker-compose 一樣讀取 env 文件來加載環境變量;Taskfile 會默認加載同級目錄下的.env文件, 也可以在 Taskfile 內通過dotenv命令來配置特定文件:

version:'3'

dotenv:[".env",".testenv"]

tasks:
default:
cmds:
-echo"$ABCD"
-echo"$TESTENV"
053e3de8-0511-11ed-ba43-dac502259ad0.png

增強變量

除了標準的環境變量以外, 在 Taskfile 中還內置了一種使用更加廣泛的增強變量vars; 該變量模式可以通過 go 的模版引擎進行讀取(插值引用), 且具有環境變量不具備的特殊特性. 以下為 vars 變量的示例:

version:'3'

#全局var變量
vars:
GLOBAL_VAR:"globalvar"

tasks:
testvar:
#taskvar變量
vars:
TASK_VAR:"taskvar"
cmds:
-"echo{{.GLOBAL_VAR}}"
-"echo{{.TASK_VAR}}"

除了上面與環境變量類似的使用以外, vars 增強變量還支持動態定義; 常見的場景, 比如我們想每次 task 執行時都獲取當前的 git commit id, 此時可以使用 vars 的動態定義特性:

version:'3'

tasks:
build:
cmds:
-gobuild-ldflags="-Xmain.Version={{.GIT_COMMIT}}"main.go
vars:
#每次任務執行時,GIT_COMMIT都會調用shell命令來生成這個變量
GIT_COMMIT:
sh:gitlog-n1--format=%h

vars 變量還內置了一些特殊的預定義變量, 例如{{.TASK}}變量永遠表示當前的任務名稱、{{.CLI_ARGS}}可以引用命令行輸入等.

version:'3'

tasks:
yarn:
cmds:
-yarn{{.CLI_ARGS}}

此時如果執行task yarn -- install, 那么{{.CLI_ARGS}}值將會變成install從而執行yarn install命令.

除此之外, vars 變量還具備一些其他特性, 比如跨任務引用時可進行覆蓋傳遞等, 這些特性將會在后面介紹.

執行目錄

Taskfile 內定義的 task 默認在當前目錄下執行, 如果期望在其他目錄執行, 無需手動編寫cd等命令, 可以直接通過配置dir參數來設置執行目錄:

version:'3'

tasks:
test1:
dir:/tmp#在指定目錄執行
cmds:
-"ls"

任務依賴

在 CI 等環境的使用中, 我們常常需要定義任務的執行順序和依賴關系; Taskfile 中通過deps配置來提供任務依賴關系的支持:

version:'3'

tasks:
build-jar:
cmds:
-echo"編譯jar包..."
build-static:
cmds:
-echo"編譯前端UI..."
build-docker:
deps:[build-jar,build-static]
cmds:
-echo"打包docker鏡像..."

任務調用

當我們在 Taskfile 中定義了多個任務時, 很可能一些任務具有一定的相似性, 此時我們可以通過任務互相調用和 vars 變量動態覆蓋的方式來定義模版 Task:

version:'3'

tasks:
docker:
cmds:
#-dockerbuild-t{{.IMAGE_NAME}}{{.BUILD_CONTEXT}}
-echo{{.IMAGE_NAME}}{{.BUILD_CONTEXT}}

build-backend:
cmds:
-task:docker#引用其他task
vars:{#動態傳入變量
IMAGE_NAME:"backend",
BUILD_CONTEXT:"maven/target"
}

build-frontend:
cmds:
-task:docker
vars:{
IMAGE_NAME:"frontend",
BUILD_CONTEXT:"public"
}
default:#default用于在命令行不顯示輸入任何task名稱時調用
cmds:
-task:build-backend
-task:build-frontend
054ed0c2-0511-11ed-ba43-dac502259ad0.png

引入其他文件

Taskfile 支持通過includes關鍵字來引入其他 Taskfile, 從而方便 Taskfile 的結構化處理.

需要注意的是, 由于引入的文件中可能會包含多特 task, 所以在使用時需要對引入的文件進行命名, 且通過命名引用目標 task:

version:'3'

includes:
file1:./file1.yaml#直接引用yaml文件
dir2:./dir2#引用目錄時默認引用該目錄下的Taskfile.yaml
057a0f26-0511-11ed-ba43-dac502259ad0.png

在引入其他 Taskfile 時,默認情況下會在當前主 Taskfile 目錄下執行命令, 我們同樣可以通過dir參數來控制引入的 Taskfile 內的 task 在特定目錄下執行:

version:'3'

includes:
dir1:./dirtest.yaml#直接在當前目錄執行
dir2:
taskfile:./dirtest.yaml
dir:/tmp#在指定目錄執行
05877918-0511-11ed-ba43-dac502259ad0.png

defer 處理

熟悉 go 語言的同學應該知道, go 里面有個很方便的關鍵字defer; 該指令用于定義在最終代碼收尾時要執行的動作, 常見的比如資源清理等. Taskfile 中同樣支持了該指令, 可以方便我們在任務執行期間完成一些清理操作:

version:'3'

tasks:
default:#default用于在命令行不顯示輸入任何task名稱時調用
cmds:
-wget-qhttps://github.com/containerd/nerdctl/releases/download/v0.19.0/nerdctl-full-0.19.0-linux-amd64.tar.gz
#定義清理動作
-defer:rm-fnerdctl-full-0.19.0-linux-amd64.tar.gz
-tar-zxfnerdctl-full-0.19.0-linux-amd64.tar.gz
05a10dba-0511-11ed-ba43-dac502259ad0.png

當然, defer 指令除了直接寫命令以外, 還可以引用其他 task 完成清理:

version:'3'

tasks:
cleanup:
cmds:
-rm-f{{.FILE}}
default:#default用于在命令行不顯示輸入任何task名稱時調用
cmds:
-wget-qhttps://github.com/containerd/nerdctl/releases/download/v0.19.0/nerdctl-full-0.19.0-linux-amd64.tar.gz
#引用其他task進行清理,同時也可以傳遞動態變量
-defer:{task:cleanup,vars:{FILE:nerdctl-full-0.19.0-linux-amd64.tar.gz}}
-tar-zxfnerdctl-full-0.19.0-linux-amd64.tar.gz

4. 高級應用

動態檢測

輸出檢測

在某些時候, 一些任務我們可能期望進行緩存處理, 比如說已經下載好了文件就不要重復運行下載; 針對于這種需求, Taskfile 允許我們定義源文件和生成的文件, 通過這組文件的 hash 值來確定是否需要執行該任務:

version:'3'

tasks:
default:
cmds:
-wget-qhttps://github.com/containerd/nerdctl/releases/download/v0.19.0/nerdctl-full-0.19.0-linux-amd64.tar.gz
sources:
-testfile
generates:
-nerdctl-full-0.19.0-linux-amd64.tar.gz
05b21894-0511-11ed-ba43-dac502259ad0.png

從上圖中可以看到, 當首次執行任務時會生成.task目錄, 該目錄包含文件的 hash 值; 當重復執行任務時, 如果 hash 值不改變則真實任務不會真正執行.Taskfile 默認有兩種文件檢測的方式:checksumtimestamp,checksum執行文件的 hash 檢測(默認), 該模式只需要定義sources配置;timestamp執行文件的時間戳檢測, 該模式需要同時定義sourcesgenerates配置.

version:'3'

tasks:
build:
cmds:
-gobuild.
sources:
-./*.go
generates:
-app{{exeExt}}
method:checksum#指定檢測方式

除了內置的兩種檢測模式外, 我們還可以通過status配置來定義自己的檢測命令,如果命令執行結果為 0, 則認為文件是最新的, 不需要執行任務:

version:'3'

tasks:
generate-files:
cmds:
-mkdirdirectory
-touchdirectory/file1.txt
-touchdirectory/file2.txt
#testexistenceoffiles
status:
-test-ddirectory
-test-fdirectory/file1.txt
-test-fdirectory/file2.txt

輸入檢測

上面的輸出檢測用于檢測任務生成的文件結果等, 在某些情況下我們可能期望在運行任務之前來判斷某個條件, 在完全不執行的情況下確定任務是否需要運行; 此時我們可以使用preconditions配置指令:

version:'3'

tasks:
generate-files:
cmds:
-mkdirdirectory
-touchdirectory/file1.txt
-touchdirectory/file2.txt
#testexistenceoffiles
preconditions:
-test-f.env
-sh:"[1=0]"
msg:"Onedoesn'tequalZero,Halting"

Go 模版引擎

在上面變量環節中已經展示了一部分模版引擎的使用, 實際上 Taskfile 內集成了slim-sprig[1]庫, 該庫中提供了一些比較便利的方法, 這些方法都可以在模版引擎內使用:

version:'3'

tasks:
print-date:
cmds:
-echo{{now|date"2006-01-02"}}

關于這些方法和模版引擎的使用具體請參考 Go Template 相關文檔以及slim-sprig[2]文檔.

交互式終端

有些任務命令可能需要交互式終端來執行, 此時可以為 task 設置interactive選項; 當interactive設置為true時, task 在運行時可以打開交互式終端:

version:'3'

tasks:
cmds:
-vimmy-file.txt
interactive:true

更多關于 Taskfile 的細節使用請閱讀其官方文檔[3], 本文限于篇幅不在過多闡述。

審核編輯:湯梓紅


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11346

    瀏覽量

    210421
  • Makefile
    +關注

    關注

    1

    文章

    125

    瀏覽量

    19221
  • go語言
    +關注

    關注

    1

    文章

    158

    瀏覽量

    9093

原文標題:Taskfile VS Makefile,構建工具哪家強?Taskfile 敢稱王

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    openeuler安裝教程三:openeuler安裝步驟指導

    本章以光盤安裝為例介紹安裝openEuler,其他安裝方式除在啟動安裝時的引導方式不同外,待啟動安裝后則
    的頭像 發表于 12-06 16:53 ?1.6w次閱讀
    openeuler<b class='flag-5'>安裝</b>教程三:openeuler<b class='flag-5'>安裝</b>步驟指導

    pads2005安裝方法 安裝說明 安裝步驟

    pads2005安裝方法 安裝說明 安裝步驟
    發表于 11-28 09:23 ?0次下載
    pads2005<b class='flag-5'>安裝</b>方法 <b class='flag-5'>安裝</b>說明 <b class='flag-5'>安裝</b>步驟

    pads2007的安裝方法 怎么安裝 無法安裝

    pads2007的安裝方法 怎么安裝  無法安裝:圖解說明,非常詳細
    發表于 12-03 13:01 ?0次下載
    pads2007的<b class='flag-5'>安裝</b>方法 怎么<b class='flag-5'>安裝</b> 無法<b class='flag-5'>安裝</b>

    軸承的安裝

    軸承的安裝 軸承的安裝: 軸承的安裝是否正確,影響著精度、壽命、性能。因此,設計及組裝部門對于軸承的安裝要充分研究。希望要按照作業標準進行安裝
    發表于 05-14 08:10 ?921次閱讀
    軸承的<b class='flag-5'>安裝</b>

    PIII 的安裝

    PIII 的安裝   奔騰III的CPU安裝
    發表于 01-12 11:27 ?680次閱讀

    led吸頂燈如何安裝安裝教程)_led吸頂燈安裝圖解

    led燈飾越來越受大眾喜歡,雖然led燈飾好看但是安裝卻是個大難題。那么它應該要如何安裝呢?這篇文章主要就是介紹led吸頂燈的安裝教程_led吸頂燈安裝圖解。
    發表于 12-22 14:00 ?31.9w次閱讀

    PLC的安裝準備和安裝商檢、調試、檢查

    合理安排系統安裝與調試程序,是確保高效優質地完成安裝與調試任務的關鍵。
    的頭像 發表于 12-25 08:51 ?2844次閱讀

    RealViewMDK的安裝概述和驅動安裝

    本文的主要內容介紹的是RealViewMDK的安裝概述和驅動安裝
    發表于 05-09 09:15 ?16次下載

    QuartusII安裝教程之QuartusII安裝說明和硬件安裝資料免費下載

    本文檔的主要內容詳細介紹的是QuartusII安裝教程之QuartusII安裝說明和硬件安裝資料免費下載。
    發表于 03-27 17:12 ?11次下載
    QuartusII<b class='flag-5'>安裝</b>教程之QuartusII<b class='flag-5'>安裝</b>說明和硬件<b class='flag-5'>安裝</b>資料免費下載

    Kali Linux安裝Java 安裝顯卡驅動 安裝網卡補丁 并發線程限制 電源優化

    Kali Linux安裝Java 安裝顯卡驅動 安裝網卡補丁 并發線程限制 電源優化安裝Java安裝Java
    發表于 01-06 16:18 ?0次下載
    Kali Linux<b class='flag-5'>安裝</b>Java <b class='flag-5'>安裝</b>顯卡驅動 <b class='flag-5'>安裝</b>網卡補丁 并發線程限制 電源優化

    OpenSSL安裝使用:OpenSSL安裝說明

    安裝ActivePerl軟件根據提示一步一步進行安裝即可,安裝過程軟件會自動設置環境變量。要確認是否安裝成功,我們可以利用cmd命令行的形式輸入指令進入到
    的頭像 發表于 11-11 14:11 ?1727次閱讀

    openeuler安裝教程二:openeuler安裝方式介紹

    (HostOS為openEuler,虛擬化組件為發布包中的qemu、KVM)創建的虛擬化平臺和華為公有云的x86虛擬化平臺。 安裝方式當前僅支持光盤、USB盤安裝、網絡安裝、qcow2鏡像安裝
    的頭像 發表于 12-06 16:48 ?4344次閱讀
    openeuler<b class='flag-5'>安裝</b>教程二:openeuler<b class='flag-5'>安裝</b>方式介紹

    openeuler安裝教程四:openeuler安裝方法使用kickstart自動化安裝

    使用kickstart自動化安裝 使用kickstart自動化安裝 總體介紹 概述 優缺點對比 背景知識 半自動化安裝指導 環境要求 操作步驟 全自動化安裝指導 環境要求 操作步驟 總
    的頭像 發表于 12-06 17:22 ?6299次閱讀
    openeuler<b class='flag-5'>安裝</b>教程四:openeuler<b class='flag-5'>安裝</b>方法使用kickstart自動化<b class='flag-5'>安裝</b>

    安裝Linux的系統安裝工具

    安裝_Linux的系統安裝工具,可以安裝各類Linux操作系統。通過iso鏡像文件的格式安裝。也可以安裝在U盤上,本人親測通過。 ?
    發表于 09-11 10:21 ?0次下載

    如何安裝和使用cargo

    安裝和使用 cargo 在安裝Rust時,Cargo也已經隨之安裝。 如果你還沒有安裝Rust,可以參考系列教程的第一篇 Rust語言從入門到精通系列 - Hello World!
    的頭像 發表于 09-20 11:28 ?1813次閱讀
    主站蜘蛛池模板: 国产va免费精品高清在线 | 操www| 色色色爱 | 国产成人精品三级 | 亚洲精品成人a | 欧美成人天天综合在线视色 | 国产女主播在线 | 99草精品视频| 色综合久久久久久久久五月性色 | 国产免费久久精品99久久 | 亚洲精品视频专区 | 亚洲欧美色鬼久久综合 | 丁香六月婷婷综合 | 日韩精品一卡二卡三卡四卡2021 | 5566成人免费视频观看 | 欧美h网 | 中文字幕在线天堂 | 国卡一卡二卡三免费网站 | 欧美成人在线网站 | 婷婷综合五月中文字幕欧美 | 黄色三级在线看 | 国产精品一级毛片不收费 | 国产午夜精品福利 | 一级毛片一级毛片一级毛片 | 色老板在线视频一区二区 | 亚洲一区二区视频在线观看 | 天天摸天天碰色综合网 | 日本黄色美女视频 | 午夜婷婷网 | 久久国产免费观看 | 天堂网免费 | 天天操天天干天天做 | 免费啪| 天堂激情| 亚洲午夜久久久久国产 | 奇米色影院 | 黄h视频| 美国一级毛片片aa久久综合 | 免费黄色大片网站 | 国产成人精品本亚洲 | 欧美一欧美一区二三区性 |