# 實現自動化 build image 其實說白了就是封裝後的 Docker Images,具有以下特性: * 共享: 可用於公司不同團隊,或提供開源使用。 * 重複使用。 目標: 客製化個人 Drone Plugin,並帶入自定義的 HELLO 參數,取代原本的 default 值。 GitHub 範例 Drone 階段我們將會做下列的事情 * clone project (drone default action) * 編譯程式碼 * 讀取 Dockerfile 並 build 成映像檔 * 推至 Harbor 私有庫 檔案結構  # 根目錄Dockerfile 根目錄Dockerfile,我不曉得是網站少打太多還是我漏掉,補了一堆才可以RUN,直接魔改 ``` FROM golang:1.14.4-alpine AS build # 複製原始碼 COPY . /go/src/demo WORKDIR /go/src/demo RUN ls -al # 安裝 git + rsync RUN apk add git rsync # 安裝 govendor RUN go get -u github.com/gin-gonic/gin RUN go get -u github.com/kardianos/govendor # 進行編譯(名稱為:demo) RUN go build -o demo ./main.go # 最終運行golang 的基底 FROM golang:1.14.4-alpine RUN apk add git rsync RUN go get -u github.com/kardianos/govendor COPY --from=build /go/src/demo/ /app/demo WORKDIR /demo ENTRYPOINT [ "/bin/sh" ] ``` # add main.go 版本我升級到 golang:1.14.4,不然 github.com/gin-gonic/gin 不能編譯 ``` package main import ( "github.com/gin-gonic/gin" "net/http" ) func main() { r := gin.Default() r.GET("/", func(c *gin.Context) { c.String(http.StatusOK, "hello world") }) r.Run() } ``` # build-image Dockerfile ``` FROM alpine COPY . /app/ WORKDIR /app ENTRYPOINT [ "./demo" ] ``` # .drone.yml 非常需要注意私有庫 ```yml kind: pipeline type: docker # 在 Docker 內部執行管道命令 name: clone # 可自行定義的名稱 steps: - name: build-golang # 事件一:可自行定義的名稱 image: activate.adobe.com/library/plugin-govendor # 使用 neil605164/plugin-govendor 容器 commands: # 需執行的指令 - mkdir -p /usr/local/go/src/${DRONE_REPO_NAME} # 於 goroot 建立專案名稱的空資料夾 - ls -al /drone/src - rsync -r /app/demo/build-image/Dockerfile /drone/src/Dockerfile # 將 build-image/Dockerfile goroot 底下 - ls -al /drone/src - rsync -r /app/demo/* /usr/local/go/src/${DRONE_REPO_NAME} # 將 clone 的專案複製到 goroot 底下 - cd /usr/local/go/src/${DRONE_REPO_NAME} # 移動至 goroot 專案底下(vendor 我沒用到(?) - govendor sync # 編譯 golang 程式碼 (vendor 我沒用到(?) - rsync -r /usr/local/go/src/${DRONE_REPO_NAME}/* /app/demo/ # 將編譯後的程式在複製回 drone 預設 path (vendor 我沒用到(?) - rsync -r /app/demo/demo /drone/src/demo # 複製編譯完成的 build demo - ping -c 3 activate.adobe.com (測試連通 - name: build-image-push-harbor # 事件二:可自行定義的名稱 image: plugins/docker # 使用 plugins/docker 容器 settings: # harbor 因為走的是 http 協議 所以這個要關閉 不然也蓮步道 insecure : true # 請注意 username 和 password 空格 或者 from_secret: 改成我這樣子 不然會 deubg 到天亮 (這個真的找半天 username: admin password: Harbor12345 repo: 172.24.229.236/library/haha # harbor 私有庫存放位置 # auto_tag: true # tags: ${DRONE_TAG} registry: 172.24.229.236 # harbor 私有庫網址 debug: true ``` # 測試!   Pass1  Pass2  成功推上 Harbor 囉!  整體下來 就是 go lange 那個 vendor 可能 類似pkg 之類的? 目前這樣用下來,只是build image 並沒有重寫 image 裡面的東西 # 其他測試用 指令 ``` docker tag alpine 172.24.229.236/library/alpine2 docker push 172.24.229.236/library/alpine2 docker build -t activate.adobe.com/library/plugin-govendor . docker push activate.adobe.com/library/plugin-govendor sudo docker run -t -i activate.adobe.com/library/plugin-govendor ```
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.