Azure Web App 上的自定义 golang 启动命令
php小编草莓今天为大家介绍Azure Web App上的自定义golang启动命令。Azure Web App是一种托管的云服务,可帮助开发者轻松部署和扩展Web应用程序。而golang是一种高效的编程语言,具有快速、可靠和简洁的特点。通过自定义golang启动命令,开发者可以更好地控制Web应用程序的启动过程,实现更多个性化的功能。本文将详细介绍如何在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 应用程序,然后执行 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_package
到 1
。这可以防止再次在 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中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

本文解释了GO的软件包导入机制:命名imports(例如导入“ fmt”)和空白导入(例如导入_ fmt; fmt;)。 命名导入使包装内容可访问,而空白导入仅执行t

本文解释了Beego的NewFlash()函数,用于Web应用程序中的页间数据传输。 它专注于使用newflash()在控制器之间显示临时消息(成功,错误,警告),并利用会话机制。 Lima

本文详细介绍了MySQL查询结果的有效转换为GO结构切片。 它强调使用数据库/SQL的扫描方法来最佳性能,避免手动解析。 使用DB标签和Robus的结构现场映射的最佳实践

本文演示了创建模拟和存根进行单元测试。 它强调使用接口,提供模拟实现的示例,并讨论最佳实践,例如保持模拟集中并使用断言库。 文章

本文探讨了GO的仿制药自定义类型约束。 它详细介绍了界面如何定义通用功能的最低类型要求,从而改善了类型的安全性和代码可重复使用性。 本文还讨论了局限性和最佳实践

本文详细介绍了在GO中详细介绍有效的文件,将OS.WriteFile(适用于小文件)与OS.openfile和缓冲写入(最佳大型文件)进行比较。 它强调了使用延迟并检查特定错误的可靠错误处理。

本文使用跟踪工具探讨了GO应用程序执行流。 它讨论了手册和自动仪器技术,比较诸如Jaeger,Zipkin和Opentelemetry之类的工具,并突出显示有效的数据可视化
