BASH 讀取傳入值的坑

那些年的心酸血淚

ta-ching chen

1 minute read

前言

進入正題前想到這則推特,真是心情寫照阿!

辛酸血淚

最近利用 bash 寫測試程式,需要將參數傳入 function 內

#!/bin/bash
test() {
    echo $1
}
test "foobar"

今天卻遇到個百思不得其解的問題,程式、參數大致看起來沒有問題

#!/bin/bash
test() {
    echo $1 $2 ... $9 $10
}
test "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"

程式輸出卻變成

$ ./test.sh
a b ... i a0

透過 Multi-Stage Builds 改善持續交付流程

學習利用 Docker multi-stage builds

ta-ching chen

2 minute read

介紹

製作容器映像檔時有個常見的原則: 映像檔越小越好

但針對編譯式語言 (e.g. go, java),由於映像檔本身包含編譯環境、相依套件導致最終的映像檔十分肥大。在文章「打造最小 Go Docker Image」,我們必須先編譯好所需的 artifacts 再放進 scratch 裡面。可以想見對於一個建構持續交付的流水線 (Continuous Delivery Pipeline) 的開發人員而言,上述步驟會變得過於臃腫與繁雜。

為解決此問題在 Docker 17.05+ 以後提供名為「多階段構建 (multi-stage builds)」的新功能,透過將原先流水線中的多個映像檔整合進同個 Dockerfile 內,而後續的映像檔可透過指令取得中間映像檔 (intermediate image) 所產生的檔案 (artifacts),如此便能讓整個過程更為簡單,也確保流水線簡潔易懂及提高維護性。