gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:01:00 25 4
gpt4 key购买 nike

我正在尝试将带有 Github 操作的 Go Web 应用程序部署到 Azure 应用服务。整个部署都会成功,直到需要使用 azure/webapps-deploy@v2 部署应用。

azure/webapps-deploy@v2 error message

为了查看问题出在哪里,我创建了一个简单的 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

Startup command

当使用 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 run cmd/main.go。可悲的是,这也行不通。 Startup command

Azure Web Apps 显示运行管道时构建的所有内容:Building on Azure

有什么建议吗?我在这里缺少什么?

关于如何将上一步中创建的可执行文件上传到 Azure Web App 并在那里运行该可执行文件,有什么解决方案吗?

最佳答案

首先,您应该在 Azure Web App 中设置一个环境变量:WEBSITE_RUN_FROM_PACKAGE1。这可以防止再次在 Azure 上运行构建。从这一刻起,您应该能够上传预构建的可执行文件。

我还必须设置启动命令来运行我的特定可执行文件。 Set startup command

执行此操作后,我在 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 - Azure Web App 上的自定义 golang 启动命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76106323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com