前幾篇文章中,我們分別實現通過azure來部署.NET和Springboot的應用,今天我們來研究一下如何部署一套Go的Web應用上去。
文章配套視訊專欄:
https://space.bilibili.com/38649342/channel/seriesdetail?sid=2267536
視訊正在努力更新。
首先我們要先建立一個go的web專案,我這裡使用的是go這邊比較知名的一個web框架:gin
首先我們使用goland建立一個go的基礎專案,然後在專案目錄下執行命令:
$ go get -u github.com/gin-gonic/gin
引入gin的依賴。
引入依賴之後,我們在main方法中建立一個用來接受http請求的action,並且繫結一個路由。
r := gin.Default() r.GET("/hello", func(context *gin.Context) { context.JSON(200, gin.H{ "message": "hello world", }) })
然後我們啟動一下專案看一下socket的監聽是否正確。
可以看到我們剛才繫結的路由已經在8080埠開始監聽了,訪問一下路由地址只要能正常返回一個簡單的go的應用就建立成功了。
然後按照老規矩,我們還是首先得先把我們的程式碼上傳到azure的倉庫裡去。
同步程式碼到倉庫的過程,我們就不再贅述了,之前的時候已經寫過很多次,這裡我貼一下地址,需要的同學自行參考
Azure DevOps (一) 託管自己的Git倉庫
Azure DevOps (十一) 通過Azure Devops部署一個.NET Core WebAPI
把程式碼同步到azure的程式碼倉庫之後,接下來我們開始建立我們的編譯流水線
老規矩,如果你的預設分支不是azure自帶的main,那你需要在分支中建立一個空的yml檔案,用於存放azure的流水線指令碼。
當然,你也可以通過azure自動生成。
建立好之後,我們開始在裡面新增我們想要的步驟,首先我們要通過 go build 命令進行go的編譯,然後通過製品上傳把編譯好的可執行檔案上傳到倉庫去
go的編譯結果是直接可以執行的可執行檔案,不需要再裝sdk之類的東西,所以我們在編譯的時候要選擇編譯環境是linux和一會要部署的環境保持一致。
在工作列中搜尋go,然後選怎go編譯
然後編譯過程選擇go build,執行目錄和go mod保持一致就可以,在我們的專案根目錄下。
然後我們把編譯好的可執行檔案上傳到製品倉庫:
最後的全量指令碼程式碼如下:
# Starter pipeline # Start with a minimal pipeline that you can customize to build and deploy your code. # Add steps that build, run tests, deploy, and more: # https://aka.ms/yaml trigger: - main pool: vmImage: ubuntu-latest steps: - script: echo Hello, world! displayName: 'Run a one-line script' - script: | echo Add other tasks to build, test, and deploy your project. echo See https://aka.ms/yaml displayName: 'Run a multi-line script' - task: Go@0 inputs: command: 'build' - script: pwd; ls; mkdir target; cp go_azure_app target; - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '/home/vsts/work/1/s/target' ArtifactName: 'drop' publishLocation: 'Container'
接下來我們需要建立部署流水線,go的部署流水線非常簡單,我們只需要把編譯好的製品直接傳到伺服器上就行了,也不需要裝執行環境,
然後我們寫一個簡答的守護程式用來維護一下服務的狀態即可。
建立一下部署流水線,掛載好我們編譯流水線的結果,然後新增一個SFTP的上傳任務和一個SSH的遠端命令執行
這裡我們有一點需要注意的是,go的可執行檔案需要授予可執行許可權,不然無法直接啟動。
建立好之後,我們執行一下我們的流水線,並且訪問我們的埠,成功得到響應結果。
到這裡用azure部署go的 web應用就成功了,可能在過程上感覺相比之前簡單了許多,那是因為經過前面十幾篇文章的積累,很多細枝末節的東西我們都已經踩過來了。
到這篇文章為止,部署的操作我們也算研究的差不多了,接下來我們開始研究通過azure的流水線去玩一下更花的操作。