登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-02-18 12:00:27 360浏览 收藏

本篇文章给大家分享《使用 golang 自定义启动命令的 Azure Web App》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我正在尝试将带有 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 构建即可完美运行。

以上就是《使用 golang 自定义启动命令的 Azure Web App》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>