Azure DevOps (十三) 通過Azure Devops部署一個Go的Web應用
前幾篇文章中,我們分別實現通過azure來部署.NET和Springboot的應用,今天我們來研究一下如何部署一套Go的Web應用上去。
文章配套影片專欄:
//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的流水線去玩一下更花的操作。