Golang在Azure Pipeline中的应用问题

busg9geu  于 5个月前  发布在  Go
关注(0)|答案(1)|浏览(74)

我们正在开发我们的第一个Golang API应用程序。当执行Azure管道以发布此应用程序时,AKS pod未创建,我们得到此错误消息:

  • 错误:发布golang-app失败,由于设置了atomic而被关闭:等待条件超时 *

第二步是执行命令:kubectl -n xxxxx get events --sort-by ='{.lastTimestamp}',我们得到以下消息:
拉取图片“serverdev.azurecr.io/xxxx.golang-app.go-ver:86895“失败:[rpc错误:code = Unknown desc = failed to pull and unpack image“serverdev.azuadec.io/xxxx.golang-app.go-ver:86895”:failed to resolve reference“serverdev.azuadec.io/xxxx.golang-app.go-ver:86895”:failed to authorize:failed to fetch oauth token:unexpected status:401 Unauthorized,rpc error:code = Unknown desc = failed to pull and unpack image“serverdev.azuadec.io/xxxx.golang-app.go-ver:86895”:无法解析引用“serverdev.azuad.io/xxxx.golang-app.go-ver:86895”:无法授权:无法获取匿名令牌:意外状态:401未授权]
hilarius situacion,是当我们开发一个Net Core应用程序时,因为pod是正确创建的,没有任何错误。
我需要一些建议来解决这个问题。
先谢了。
PS:我们有Azure Kubernetes Service版本1.25.6和Helm 3.7
我们在Azure管道中更改了许多参数,但我们得到了相同的错误,另一方面,净核心应用程序没有得到任何错误消息。

von4xj4u

von4xj4u1#

我们在部署go项目时遇到了同样的问题。

  • 为什么会出现这个错误?*

请考虑以下文件夹结构:

my_project
 /api
 /config
 /migrations
 /submodule_1
 /submodule_2

字符串
在代码中,我们以这种方式导入包:

package main

import (
    "github.com/lib/pq"
    ...
    "gitlab.com/my_project/submodule_1"
    "gitlab.com/my_project/submodule_2/models" 
    ...
)


当我们的CI/CD管道运行并进入构建阶段时,它需要访问项目中使用的所有包。
由于git子模块被认为是第三方软件包,构建过程会尝试获取它们。
例如,"github.com/lib/pq"包是可以访问的,因为它是一个公共存储库。但是"gitlab.com/my_project/submodule_1"可能无法从正在构建项目的计算机访问,从而导致此错误(因为缺少权限或存储库是私有的)

  • 解决方案 *

您可以通过两种方式解决此问题:
1.确保build stage可以访问您的子模块
1.将子模块中的所有代码复制到非子模块文件夹中。
我们选择了第二个选项:

my_project
 /api
 /config
 /migrations
 /modules/
     /submodule_1
     /submodule_2
 /submodule_1
 /submodule_2


通过这种方式,modules文件夹中的所有代码都成为my_project代码的一部分,因此build阶段不需要获取它
P.S:你可以使用这个脚本来复制所有的子模块到你的新文件夹:

// Makefile
submodule-gen:
    rm -rf modules/${SUBMODULE_1_FOLDERNAME}
    rm -rf modules/${SUBMODULE_2_FOLDERNAME}
    mkdir -p modules/${SUBMODULE_1_FOLDERNAME}
    mkdir -p modules/${SUBMODULE_2_FOLDERNAME}
    rsync -r --exclude '.git' ${SUBMODULE_1_FOLDERNAME}/ modules/${SUBMODULE_1_FOLDERNAME}
    rsync -r --exclude '.git' ${SUBMODULE_2_FOLDERNAME}/ modules/${SUBMODULE_2_FOLDERNAME}

相关问题