最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Shell腳本生成Go的程序包的實現(xiàn)步驟

 更新時間:2024年01月09日 10:04:30   作者:尋找09之夏  
通過編寫Shell腳本,我們可以大大簡化Golang項目的打包和部署流程,本文就來介紹一下Shell腳本生成Go的程序包的實現(xiàn)步驟,感興趣的可以了解一下

前言

隨著Go語言的普及,越來越多的開發(fā)人員選擇使用Go編寫代碼。雖然越來越多的公司項目已使用持續(xù)集成/持續(xù)部署(CI/CD)工具,用于自動化構(gòu)建、測試和部署Go程序包,但存在一些部署在ECS服務(wù)器的Go程序包或需要手動編譯打包上傳鏡像倉庫的鏡像。然而,手動創(chuàng)建和管理這些程序包可能會變得相當繁瑣。因此,為了提高開發(fā)效率,使用Shell腳本來自動化這個過程是一個不錯的選擇。

Shell腳本

針對上述說到的兩種情況:一個是部署在ECS上Go服務(wù)程序包、另一個是手動部署K8s上的Go服務(wù)鏡像包,下面分別給出代碼。

一鍵生成Go程序包

本人使用Window系統(tǒng)開發(fā),使用Go的gracehttp實現(xiàn)服務(wù)平滑重啟,但Window對信號量處理存在問題,導(dǎo)致在Window環(huán)境下生成的Go程序包無法平滑重啟,所以這里使用alpine將項目編譯生成程序包到本地項目目錄中,完美解決該問題。

deploy.sh

#!/bin/bash

# 定義環(huán)境變量
environments=("test" "prod")
image="go-demo"

# 函數(shù):顯示綠色成功信息
function success {
    echo -e "\033[1;32m$1\033[0m"
}

# 函數(shù):顯示綠色成功信息
function info {
    echo -e "\033[33m$1\033[0m"
}

# 函數(shù):顯示紅色錯誤信息并退出
function error {
    echo -e "\033[1;31m$1\033[0m"
    exit 1
}

info "Please select the packaging environment:(Select number) "
select env in "${environments[@]}"; do
    if [ "$env" == "test" ]; then
        port="80"
        success "The packaging environment you entered is: $env"
        break
    elif [ "$env" == "prod" ]; then
        port="8080"
        success "The packaging environment you entered is: $env"
        break
    else
        error "Invalid environment selection, please re-enter"
        exit 1
    fi
done

info "\nbuild start:"

info "\n1) docker build running..."
docker build --build-arg PORT="$port" -t "$image:$env" -f deploy/docker/Dockerfile . &> /dev/null

info "\n2) docker running..."
docker run -itd --name "$image-$env" "$image:$env" &> /dev/null

info "\n3) docker cp package..."
docker cp "$image-$env:/app/main_$port"  ./

info "\n4) delete containers..."
docker ps -a | grep "$image-$env"* | awk '{print $1}' | xargs docker rm -f &> /dev/null

info "\n5) remove images..."
docker rmi -f $(docker images "$image:$env"* -q | sort | uniq) &> /dev/null

info "\nbuild done!"

exit 0

Dockerfile

FROM golang:1.17.6-alpine

LABEL maintainer="xxx@xxx.com"

# 文件名稱
ARG PORT

# 設(shè)置工作目錄
ENV WORKDIR /app

# 關(guān)閉CGO
ENV CGO_ENABLED 0

# 設(shè)置GOOS和GOARCH
ENV GOOS linux
ENV GOARCH amd64
ENV GOPROXY https://goproxy.cn,direct

# 聲明工作目錄
WORKDIR $WORKDIR

# 拷貝整個項目到工作目錄
COPY . .

# 項目依賴包
RUN go mod download

# 項目編譯
RUN go build -ldflags="-s -w" -o $WORKDIR/main_$PORT ./main.go

# 運行300s
# CMD ["sleep", "300"]

執(zhí)行結(jié)果

一鍵生成Go鏡像包

現(xiàn)在我們很多項目部署在K8s上,所以將程序編譯打包成進行鏡像,其中需要將代碼打包成程序包,而且需要將程序包上傳到倉庫,供k8s下載使用,通過編寫Xshell程序,可以大大提高效率。

deploy.sh

#!/bin/bash

# 倉庫域名
WAREHOUSE_DOMAIN="harbor.xxx.com"
# 鏡像路徑
MIRROR_PATHNAME="xxx/login"

# 函數(shù):顯示綠色成功信息
function success {
    echo -e "\033[1;32m$1\033[0m"
}

# 函數(shù):顯示綠色成功信息
function info {
    echo -e "\033[33m$1\033[0m"
}

read -p "Please enter the packaging version:" version
success "The packaging version you entered is: $version\n"

info "build start:\n"

info "1) docker build...\n"
docker build -f ./deploy/docker/Dockerfile -t "$MIRROR_PATHNAME:$version" . &> /dev/null

info "2) docker tag...\n"
docker tag "$MIRROR_PATHNAME:$version" "$WAREHOUSE_DOMAIN/$MIRROR_PATHNAME:$version" &> /dev/null

info "3) docker push...\n"
docker push "$WAREHOUSE_DOMAIN/$MIRROR_PATHNAME:$version" &> /dev/null

info "4) delete containers...\n"
docker ps -a | grep "$WAREHOUSE_DOMAIN/$MIRROR_PATHNAME*" | awk '{print $1}' | xargs docker rm -f &> /dev/null

info "5) remove images...\n"
docker rmi -f $(docker images "$WAREHOUSE_DOMAIN/$MIRROR_PATHNAME*" -q | sort | uniq) &> /dev/null

info "build done!"

exit

Dockfile

# =========================================== 第一階段:構(gòu)建應(yīng)用程序  ===========================================  
FROM golang:1.17.6-alpine AS builder  
  
# 設(shè)置維護者信息  
LABEL maintainer="xxx@xxx.com"  
  
# 設(shè)置工作目錄  
ENV WORKDIR /app  
  
# 關(guān)閉CGO,以減少構(gòu)建過程中的依賴和體積  
ENV CGO_ENABLED 0  
  
# 設(shè)置目標操作系統(tǒng)和架構(gòu)  
ENV GOOS linux  
ENV GOARCH amd64  
ENV GOPROXY https://goproxy.cn,direct  
  
# 切換到工作目錄  
WORKDIR $WORKDIR  
  
# 拷貝當前目錄下的所有文件到工作目錄  
COPY . .  
  
# 下載項目依賴包  
RUN go mod download  
  
# 查看工作目錄中的文件列表,可以用來檢查文件是否正確拷貝  
RUN ls -al  
  
# 編譯項目,-ldflags參數(shù)用于優(yōu)化生成的二進制文件大小和性能  
RUN go build -ldflags="-s -w" -o $WORKDIR/main ./main.go  
  
# =========================================== 第二階段:構(gòu)建Docker鏡像  ===========================================  
FROM loads/alpine:3.8
  
# 設(shè)置維護者信息  
LABEL maintainer="xxx@xxx.com"  
  
# 設(shè)置工作目錄和時區(qū)  
ENV WORKDIR /app  
ENV TZ  Asia/Shanghai  
  
# 將第一階段構(gòu)建的應(yīng)用程序復(fù)制到當前鏡像的工作目錄  
COPY --from=builder /app/main $WORKDIR/main  
RUN chmod +x $WORKDIR/main
  
# 切換到工作目錄  
WORKDIR $WORKDIR  
  
# 設(shè)置容器啟動時的命令為應(yīng)用程序的可執(zhí)行文件路徑  
CMD ["./main"]

執(zhí)行結(jié)果

結(jié)語

通過編寫Shell腳本,我們可以大大簡化Golang項目的打包和部署流程,提升工作效率。當然,實際生產(chǎn)環(huán)境中可能還需要考慮更多因素,如版本管理、依賴處理、日志收集等,但以上步驟已經(jīng)構(gòu)成了一個基礎(chǔ)的自動化部署框架。隨著需求的增加,你可以在這個基礎(chǔ)上不斷擴展和完善你的部署腳本,使其更加符合你的業(yè)務(wù)需求。

到此這篇關(guān)于Shell腳本生成Go的程序包的實現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Shell生成Go程序包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Linux與Windows上獲取當前堆棧信息的方法

    在Linux與Windows上獲取當前堆棧信息的方法

    下面小編就為大家?guī)硪黄贚inux與Windows上獲取當前堆棧信息的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • php-fpm開機自動啟動Shell腳本

    php-fpm開機自動啟動Shell腳本

    這篇文章主要介紹了php-fpm開機自動啟動Shell腳本,本文腳本只是范例,其實你編譯安裝完成后,啟動腳本已經(jīng)生成在編譯目錄中,只需要復(fù)制出來用就可以了,需要的朋友可以參考下
    2015-06-06
  • Linux里awk中split函數(shù)的用法小結(jié)

    Linux里awk中split函數(shù)的用法小結(jié)

    The awk function split(s,a,sep) splits a string s into an awk array a using the delimiter sep
    2013-03-03
  • Shell腳本中$符號的嵌套使用方法小結(jié)

    Shell腳本中$符號的嵌套使用方法小結(jié)

    在編寫Shell腳本時,通過嵌套使用$符號,間接獲取變量或表達式的值的具體方法,文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-05-05
  • 詳解gitBash中使用Linux中的tree命令

    詳解gitBash中使用Linux中的tree命令

    最近很多同學(xué)問小編關(guān)于Linux命令的問題,小編今天主要介紹Linux里的tree命令,tree命令是一種遞歸目錄列表顯示命令,使用該命令可以以樹狀圖的形式列出一個目錄下所有文件內(nèi)容,本文給大家介紹gitBash中使用Linux中的tree命令,一起看看吧
    2023-11-11
  • bash if條件判斷的使用

    bash if條件判斷的使用

    本文主要介紹了bash if條件判斷的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • shell中打印ssh登錄遠端ip地址的實現(xiàn)

    shell中打印ssh登錄遠端ip地址的實現(xiàn)

    本文主要介紹了shell中打印ssh登錄遠端ip地址的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2008-12-12
  • linux 中vim的用法講解

    linux 中vim的用法講解

    Vim 是 Linux 系統(tǒng)上的最著名的文本/代碼編輯器,也是早年的 Vi 編輯器的加強版,而 gVim 則是其 Windows 版。這篇文章主要介紹了linux 中vim的用法講解的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • shell清理指定目錄中指定天數(shù)之前的舊文件

    shell清理指定目錄中指定天數(shù)之前的舊文件

    本文主要介紹了shell清理指定目錄中指定天數(shù)之前的舊文件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Linux查看磁盤信息的命令詳解

    Linux查看磁盤信息的命令詳解

    這篇文章主要介紹了Linux查看磁盤信息的命令,df與du命令,df 命令主要用于需要檢查文件系統(tǒng)上已使用和可用的磁盤空間的數(shù)量,du命令主要用于需要了解系統(tǒng)上的目錄或文件所使用的磁盤空間量,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-04-04

最新評論

莱阳市| 大港区| 榆树市| 巨野县| 邯郸市| 广元市| 黄平县| 安图县| 武鸣县| 固安县| 紫阳县| 孝昌县| 甘谷县| 苏尼特左旗| 揭阳市| 永平县| 扎兰屯市| 朝阳县| 云梦县| 民权县| 卓尼县| 正镶白旗| 建始县| 汶上县| 佛山市| 工布江达县| 集贤县| 吉木萨尔县| 南皮县| 云龙县| 遂平县| 青河县| 饶平县| 浮山县| 浪卡子县| 田林县| 准格尔旗| 富川| 奉节县| 图们市| 威远县|