首頁  >  文章  >  後端開發  >  Azure Web App 上的自訂 golang 啟動指令

Azure Web App 上的自訂 golang 啟動指令

王林
王林轉載
2024-02-09 12:03:081004瀏覽

Azure Web App 上的自定义 golang 启动命令

php小編草莓今天為大家介紹Azure Web App上的自訂golang啟動指令。 Azure Web App是一種託管的雲端服務,可協助開發者輕鬆部署和擴充Web應用程式。而golang是一種高效率的程式語言,具有快速、可靠和簡潔的特性。透過自訂golang啟動命令,開發者可以更好地控制網路應用程式的啟動過程,實現更多個人化的功能。本文將詳細介紹如何在Azure Web App上進行自訂golang啟動命令的設定和使用,幫助開發者更好地利用這項功能。

問題內容

我正在嘗試將帶有 github 操作的 go web 應用程式部署到 azure 應用程式服務。整個部署成功,直到應用程式需要使用 azure/webapps-deploy@v2 進行部署。

為了查看問題出在哪裡,我創建了一個簡單的 go 'hello world' 測試應用程式。只需部署這個非常簡單的應用程式就可以了。然而,在嘗試部署測試應用程式時,我注意到了一些事情:

  • 該應用程式在 azure 上完全重建,而不是使用可執行檔來運行。我以前的部署文件如下所示:
name: go deployment

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

jobs:
  build:
    runs-on: ubuntu-latest
    environment: production
    steps:
    # checkout the repo 
    - uses: actions/checkout@master

    # setup go
    - name: setup go
      uses: actions/setup-go@v3
      with:
       go-version: '1.20'

    - run: go version

    # install dependencies
    - name: go build
      working-directory: .
      run: |
       go build
      
    - name: upload artifact for deployment job
      uses: actions/upload-artifact@v3
      with:
        name: go-app
        path: .

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: download artifact from build job
        uses: actions/download-artifact@v3
        with:
          name: go-app
          
      - name: 'deploy to azure web app'
        id: deploy-to-webapp
        uses: azure/webapps-deploy@v2
        with:
          app-name: ${{ env.azure_webapp_name }}
          slot-name: 'production'
          publish-profile: ${{ secrets.azureappservice_publishprofile }}
          package: .

這部署沒有問題。程式碼庫應用程式被饋送到 azure web 應用程式。當我嘗試在最後一步中使用可執行檔時,部署失敗。當然,azure web app 有一個用於設定啟動命令的自訂欄位。我嘗試將其設置為 ./main 以在啟動時運行可執行文件,但這仍然失敗。

with:
          app-name: ${{ env.azure_webapp_name }}
          slot-name: 'production'
          publish-profile: ${{ secrets.azureappservice_publishprofile }}
          package: main

當使用 go build main.go 在我的本地電腦上建立 go 應用程序,然後執行 ./main 時,該應用程式運行沒有問題。

  • 因為我無法只執行上一個步驟中的可執行文件,所以我決定回滾並讓 azure 應用程式服務按原樣執行 go 應用程式。如果是這樣,則不再需要整個建置步驟,只需將程式碼推送到 azure web 服務即可。就像這樣:
name: Go

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

jobs:
  build:
    runs-on: ubuntu-latest
    environment:
      name: 'Production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
    steps:
    # checkout the repo 
    - uses: actions/checkout@master

    - name: 'Deploy to Azure Web App'
      id: deploy-to-webapp
      uses: azure/webapps-deploy@v2
      with:
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        slot-name: 'Production'
        publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE }}
        package: .

儘管必須推送整個程式碼庫,但它仍然運作得很好。然而,在我們的生產應用程式中,由於結構原因,main.go 檔案不位於根目錄中。為了模仿這種行為,我將 main.go 檔案放置在 /cmd 目錄下。 azure web app 的部署再次失敗。可以猜測,這可能是由於 azure 無法找到 main.go 檔案。我想再次使用啟動命令,但這次使用 go 運行 cmd/main.go。可悲的是,這也不行。

azure web apps 顯示運行管道時建立的所有內容:

有什麼建議嗎?我在這裡缺少什麼?

關於如何將上一步中創建的可執行文件上傳到 azure web app 並在那裡運行該可執行文件,有什麼解決方案嗎?

解決方法

首先,您應該在 azure web app 中設定一個環境變數:website_run_from_package1。這可以防止再次在 azure 上運行建置。從這一刻起,您應該能夠上傳預先建置的可執行檔。

我還必須設定啟動命令來運行我的特定可執行檔。

#執行此操作後,我在 https://appname- 的日誌中看到以下內容here.scm.azurewebsites.net/api/logstream

#
2023-04-26T17:20:12.596331026Z Detecting platforms...

2023-04-26T17:20:12.805572634Z Could not detect any platform in the source directory.

2023-04-26T17:20:15.792565274Z Running /home/site/wwwroot/go-test now

2023-04-26T17:20:15.928193597Z /home/site/wwwroot/go-test: /lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.32' not found (required by /home/site/wwwroot/go-test)

2023-04-26T17:20:15.934491135Z /home/site/wwwroot/go-test: /lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.34' not found (required by /home/site/wwwroot/go-test)

出現版本 glibc_2.34 是因為該應用程式是使用 ubuntu-latest 在管道中建構的。這是 ubuntu-22.04,其中有 glibc_2.35 但要運行的 azure 計算機沒有此版本。使用 ubuntu-20.04 版本 glibc_2.31 建置即可完美運作。

以上是Azure Web App 上的自訂 golang 啟動指令的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除