<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Prometheus構(gòu)建發(fā)布工具 promu 使用

          共 2792字,需瀏覽 6分鐘

           ·

          2022-03-08 08:08

          眾所周知,Go語言中打包命令是 go build。在項目中,你可以單獨使用 go build 命令對項目進行編譯打包,也可以根據(jù)自己的需要,在該命令后加各種參數(shù)。prometheus官方為了統(tǒng)一項目(包括 prometheus、alertmanager和各種官方的 exporter)的編譯和打包,開發(fā)了 promu 工具。

          官方對 promu 工具的介紹:

          `promu?is?the?utility?tool?for?building?and?releasing?Prometheus?projects``#?promu是一個構(gòu)建和發(fā)行Prometheus項目的實用工具`

          promu工具的獲取

          源碼編譯

          git?clone?https://github.com/prometheus/promu.git
          make?build

          直接下載可執(zhí)行文件

          curl?-s?-L?https://github.com/prometheus/promu/releases/download/v0.5.0/promu-0.5.0.linux-amd64.tar.gz?|?tar?-xvzf?-?-C?/tmp

          promu配置文件介紹

          promu使用過程中,最重要的配置文件是 .promu.yml,但是,官網(wǎng)上除了對promu工具參數(shù)的簡單解釋外,沒有對 .promu.yml的編寫進行說明,下面我們對一些常用的配置進行說明(可能官方覺得既然都要去編譯prometheus項目了,那肯定會去看代碼的,所以就不寫文檔了)

          下面這個.promu.yml文件,就是在我的一個go項目中使用promu工具進行打包的配置文件

          #?go相關(guān)的基本配置
          go:
          ??cgo:?true
          repository:
          ??#?module?name
          ??path:?woqutech.com/jianqiang.zhu/my-golang
          #?構(gòu)建
          build:
          ??binaries:
          ??????#?輸出的二進制包名稱
          ????-?name:?woqu
          ??????#?main方法所在go文件的位置
          ??????path:?./
          ??flags:?-a?-tags?netgo
          ??#?編譯時注入變量,結(jié)合prometheus的version包使用
          ??ldflags:?|
          ????-X?github.com/prometheus/common/version.Version={{.Version}}
          ????-X?github.com/prometheus/common/version.Revision={{.Revision}}
          ????-X?github.com/prometheus/common/version.Branch={{.Branch}}
          ????-X?github.com/prometheus/common/version.BuildUser={{user}}@{{host}}
          ????-X?github.com/prometheus/common/version.BuildDate={{date?"20060102-15:04:05"}}
          #?打包,將生成的二進制包和files下列出的文件進行打包
          tarball:
          ??files:
          ????-?default.yml
          ????-?README.md
          #?交叉編譯
          crossbuild:
          ??platforms:
          ????-?linux/amd64
          ????-?linux/386

          go標簽

          (1)cgo

          go語言提供了CGO機制,使得能夠在go代碼中直接調(diào)用C的庫函數(shù),大大提高了效率,減少了重復開發(fā)工作,如果你的項目中引用了用CGO寫成的庫,在編譯時要把CGO_ENABLED=1開起來。如在使用go-sqlite3

          (2)Oracle exporter 需要oracle提供的OCI或ODPI動態(tài)鏈接庫支持,需要開啟CGO特性

          (3)網(wǎng)上說使用CGO的庫,會使整個系統(tǒng)的性能大大降低。goroutine 通過 CGO 進入到 C 接口的執(zhí)行階段后,已經(jīng)脫離了 golang 運行時的調(diào)度并且會獨占線程,此時實際上變成了多線程同步的編程模型。如果 C 接口里有阻塞操作,這時候可能會導致所有線程都處于阻塞狀態(tài)?

          repository標簽

          (1)path

          - path后所填的變量為你的模塊,go語言在1.11后,官方支持了模塊,即Go Modules,使用go mod命令實現(xiàn)

          - 當你在你項目的根目錄執(zhí)行 go mod init woqutech.com/jianqiang.zhu/my-golang后,當前目錄就變成了一個go模塊,并會生成一個go.mod文件

          - 若path后所填不是模塊名,promu工具編譯時則會去GOPATH或GOROOT目錄下找,如下圖:

          build標簽

          (1)binaries

          - 輸出的二進制包的名字:name

          - 指定main包的位置:path

          - 可以以yml列表的形式編寫多個,執(zhí)行build命令后生成多個二進制包

          (2)flags

          -a:強制重新構(gòu)建

          -tags:TODO,還不清楚具體干啥

          (3)ldflags

          編譯時加上ldflags屬性,可以設置變量的值,在prometheus項目中通常用來設置版本等基礎信息(當前項目必需被git所管理,否則編譯時獲取不到分支等信息),并結(jié)合prometheus的version包來使用,下面是個簡單的例子:

          package?main
          ??
          import?"gopkg.in/alecthomas/kingpin.v2"
          import?"github.com/prometheus/common/version"
          ??
          func?main()?{
          ????kingpin.Version(version.Print("woqu"))
          ????kingpin.Parse()
          }

          - 命令: ?./promu ?build

          tarball標簽

          (1)files

          編譯完成之后,你可能需要將二進制文件和其他文件一起打個包,則可使用這個命令

          命令: ?./promu tarball

          crossbuild標簽

          golang支持交叉編譯,我們生產(chǎn)環(huán)境均為linux/amd64環(huán)境,無需使用該功能,不然多環(huán)境的使用會引入不必要的麻煩。

          但是某些依賴庫在操作系統(tǒng)上安裝部署非常麻煩,可以借助crossbuild在docker環(huán)境中構(gòu)建可執(zhí)行程序。

          原文鏈接:http://blog.lujianxin.com/x/art/mwuvnoldjj83

          瀏覽 69
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产永久免费无遮挡被操裸体美女 | 国产性爱大片 | 国内自拍在线观看 | 精品久久久久久久久久久久久久久 | 天天肏在线观看 |