第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

對(duì)于帶有子包的 golang 源,AWS CodeBuild 失敗

對(duì)于帶有子包的 golang 源,AWS CodeBuild 失敗

Go
桃花長(zhǎng)相依 2023-05-08 17:56:29
當(dāng)我嘗試使用 CodeBuild golang 映像 1.10 構(gòu)建我的 golang 項(xiàng)目時(shí),它失敗了,無法找到子包。一些背景:該應(yīng)用程序的組織如下:/go/src/company/app/go/src/company/app/sub1/go/src/company/app/sub2etc...這在我的開發(fā)機(jī)器上構(gòu)建良好。但是,當(dāng)通過 codebuild 拉取時(shí),它會(huì)被拉入不同的目錄 ( /codebuild/output/srcNNN/src/<some path>),其中<some path>根據(jù)觸發(fā)構(gòu)建的內(nèi)容而有所不同。我最初是通過將代碼從它被拉到 golang 目錄 ( /codebuild/output/srcNNN) 復(fù)制它來工作的,但是由于目錄的 CodeBuild 環(huán)境變量在前面GOPATH插入 /go: ( ),我使用了觀察到的 ../ /go:/codebuild/output/srcNNN../... 復(fù)制。但是,一旦我以不同的方式觸發(fā)構(gòu)建,這很丑陋并且失敗了。我的問題是是否有一種好的方法可以使它正常工作?我的下一個(gè)想法是將字符串操作應(yīng)用于觀察到的路徑并復(fù)制到那里以獲得(希望)更高的可靠性。但這只有在GOPATH符合我的假設(shè)的情況下才有效。任何想法,將不勝感激。澄清:在代碼中導(dǎo)入包時(shí),外部包的導(dǎo)入方式如下:import (    "context"    ...}子包未顯式導(dǎo)入,但在部署代碼時(shí)發(fā)現(xiàn),如上所示 ( /go/src/company/app)。但是,AWS CodeBuild 不會(huì)以這種方式引入代碼。
查看完整描述

2 回答

?
慕勒3428872

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊

如果您使用的是 golang 1.11 或更高版本,請(qǐng)參閱下面的更新以獲得完整答案......我們不再使用我最初的解決方法。

我能夠得到一個(gè)有效的答案。我會(huì)把它貼在這里以防它對(duì)其他人有幫助,但它依賴于在 AWS CodeBuild 中觀察到的行為才能工作,所以我認(rèn)為它不是理想的。

在我的 buildspec.yaml 中,我可以通過以下方式使構(gòu)建工作:

  1. ${THEGOPATH}${GOPATH}開頭刪除“/go: ”

  2. 將所有代碼復(fù)制到${THEGOPATH}/src/<app path>

  3. 將其他存儲(chǔ)庫(kù)復(fù)制到${THEGOPATH}/src/<other app path>

  4. 正常導(dǎo)入外部依賴項(xiàng)(在我們的例子中,go get ./...或顯式)

  5. 構(gòu)建并強(qiáng)制輸出名稱(從 CodeBuild 啟動(dòng)時(shí)它使用不同的目錄名稱)

buildspec.yaml 類似于以下內(nèi)容:

phases:

  install:

    commands:

      - echo GOPATH - $GOPATH

      - export THEGOPATH=`echo $GOPATH | cut -c 5-`

      - echo THEGOPATH = $THEGOPATH

      - mkdir -p ${THEGOPATH}/src/company/app1

      - mkdir -p  ${THEGOPATH}/src/company/other_repository_dependency

      - echo Copy source files to go root

      - cp -a ${CODEBUILD_SRC_DIR}/. ${THEGOPATH}/src/company/app1/${PACKAGE}

      - cp -a ${CODEBUILD_SRC_DIR_other_dep}/. ${THEGOPATH}/src/app/other_repository_dependecy/.

      - ls ${THEGOPATH}/src/

  build:

    commands:

      - echo Build started on `date`

      - echo Getting packages

      - go get ./...

      - echo DOING THE BUILD

      - go build -ldflags "<some flags>" -o "appname"

      - go test ./...

  post_build:

    commands:

      - echo Build completed on `date`

      - ls -al

      - pwd

artifacts:

  files:

    - appname

更新——更好地修復(fù) 今天我們嘗試使用 go 模塊(自 1.11 起可用)進(jìn)行構(gòu)建,請(qǐng)參閱此處以獲取對(duì) go 模塊的解釋。


company-name.com使用 go modules,我們?cè)?go.mod 文件中定義了當(dāng)前源模塊 app1,如下所示:


module company-name.com/app1


go 1.12

require (

   ... *for example*

   github.com/golang/mock v1.3.1

   github.com/google/btree v1.0.0 // indirect

   github.com/google/go-cmp v0.3.0

   ... *etc*

我們甚至以這種方式引用我們的外部文件(盡管您需要弄清楚如何使用您的 git 存儲(chǔ)庫(kù)進(jìn)行身份驗(yàn)證。我們使用構(gòu)建規(guī)范中內(nèi)置的憑據(jù)助手來進(jìn)行 https 身份驗(yàn)證)。所以,我們的導(dǎo)入塊現(xiàn)在看起來像這樣:


     import ( 

       "company-name.com/app1/subpackage1"

       abbrev "company-name.com/app1/subpackage2"

       "company-name.com/externalpkg"  // In another private git repo of ours

       ... //etc

     )

     ... //golang source follows here*


最后,我們將以下環(huán)境變量添加到構(gòu)建規(guī)范中:


  variables:

    GO111MODULE: "on"

    git-credential-helper: yes

這些確保模塊在路徑中工作(感謝 amwill04 提醒我我的遺漏)并允許我們的 Git 存儲(chǔ)庫(kù)的憑據(jù)正確設(shè)置。

在這樣做的過程中,我們完成了我們需要的一切:

  1. 通過更改我們對(duì) go 模塊的引用,我們可以輕松地引用子包

  2. 我們能夠鎖定所有依賴項(xiàng)的版本

  3. 通過在 company-name.com 上實(shí)現(xiàn)一個(gè)簡(jiǎn)單的服務(wù)器,我們可以從我們的應(yīng)用程序中引用其他私有模塊


查看完整回答
反對(duì) 回復(fù) 2023-05-08
?
長(zhǎng)風(fēng)秋雁

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊

這是我采取的方法。


version: 0.2


env:

  variables:

    PACKAGE: "github.com/rhyselsmore/foo"


phases:

  install:

    commands:

      # AWS Codebuild Go images use /go for the $GOPATH so let's copy our

      # application source code into that directory structure.

      - mkdir -p "/go/src/$(dirname ${PACKAGE})"

      - ln -s "${CODEBUILD_SRC_DIR}" "/go/src/${PACKAGE}"

      - # Make sure we're in the package directort within our GOPATH

      - cd "/go/src/${PACKAGE}"

現(xiàn)在假設(shè) PACKAGE 變量是您正在構(gòu)建的存儲(chǔ)庫(kù)的根目錄,我們可以發(fā)出 go 命令。讓我們逐行分解它。


- mkdir -p "/go/src/$(dirname ${PACKAGE})"

這會(huì)在 GOPATH 中為您的包創(chuàng)建一個(gè)新目錄。


- ln -s "${CODEBUILD_SRC_DIR}" "/go/src/${PACKAGE}"

這會(huì)創(chuàng)建一個(gè)從 CodeBuild 項(xiàng)目的根目錄到您的 Go 包的符號(hào)鏈接。


- cd "/go/src/${PACKAGE}"

這為您的其余 Codebuild 操作做好準(zhǔn)備,以便在您的 Go 包的 CWD 中進(jìn)行。


查看完整回答
反對(duì) 回復(fù) 2023-05-08
  • 2 回答
  • 0 關(guān)注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)