首頁  >  文章  >  後端開發  >  在 gitlab-ci/cd 中製作 golang deb 時,...中沒有 Go 文件

在 gitlab-ci/cd 中製作 golang deb 時,...中沒有 Go 文件

王林
王林轉載
2024-02-13 13:50:09441瀏覽

在 gitlab-ci/cd 中制作 golang deb 时,...中没有 Go 文件

php小編西瓜將為您介紹在gitlab-ci/cd中製作golang deb時的一個常見問題。有時候,當我們嘗試在gitlab-ci/cd中製作golang deb套件時,可能會遇到一個錯誤,即「在...中沒有Go檔案」。這個錯誤的原因是因為在專案的根目錄中沒有Go檔。接下來,我們將為您詳細解釋如何解決這個問題,讓您順利製作golang deb套件。

問題內容

這是關於 golang 的內容,我在 gitlab-ci.yml 檔案中使用其程式碼。 這是我在 /builds/release_management 中收到 no go 檔案的錯誤,如下所示:

$ pwd
/builds/release_management
$ echo $basepathforbinaryfile1
cmd/main_1/
$ ls
copying
debpackagegitlabdocker
readme.md
cmd
deb-build
ermbuild
go.mod
publishtoremote.sh
usr
working_gitlab-ci_abletocreatedebpackagewithnobinary.yml
$ echo $ci_project_dir/$basepathforbinaryfile1
/builds/release_management/cmd/main_1/
$ goos=$goos goarch=$goarch go build -o $binaryname1 $basepathforbinaryfile1
no go files in /builds/release_management
cleaning up project directory and file based variables
00:00
error: job failed: exit code 1

這是我的工作程式碼

variables:
  goos: linux
  goarch: amd64
  tagname: 1.0.71
  debfilename: $tagname
  basepathforbinaryfile1: cmd/main_1/
  binaryname: main1
  basepathforbinaryfile2: cmd/main_2/
  binaryname: main2

build_binary:
  stage: build
  image: golang:latest
  artifacts:
    untracked: true
  script:
    - cd cmd/main_1
    - goos=$goos goarch=$goarch go build -o $binaryname1 $basepathforbinaryfile1
#    - goos=$goos goarch=$goarch go build -o $binaryname1 $ci_project_dir/$basepathforbinaryfile1

請注意:我也嘗試過給 $ci_project_dir/$basepathforbinaryfile1 ,但這也不行。

雖然,當我先執行 cd 然後使用 dot(.) 從目前建置它時,這才有效

variables:
  goos: linux
  goarch: amd64
  tagname: 1.0.71
  debfilename: $tagname
  basepathforbinaryfile1: cmd/main_1/
  binaryname: main1
  basepathforbinaryfile2: cmd/main_2/
  binaryname: main2

build_binary:
  stage: build
  image: golang:latest
  artifacts:
    untracked: true
  script:
    - cd cmd/main_1
    - goos=$goos goarch=$goarch go build -o $binaryname .

這是我的資料夾結構:

知道我應該修復什麼來修復這個 golang 錯誤嗎?

編輯1:此外,在執行cd $ci_project_dir/$basepathforbinaryfile 然後執行ls 時,它不會進入該目錄,並且仍然僅顯示基底目錄的內容:

$ echo $CI_PROJECT_DIR/$BasePathForBinaryFile1
/builds/SugarBox/edge_release_management/cmd/main_1/
$ cd $CI_PROJECT_DIR/$BasePathForBinaryFile
$ ls
COPYING
DebPackageGitLabDocker
README.md
cmd
deb-build
ermbuild
go.mod
publishToRemote.sh
usr
working_gitlab-ci_ableToCreateDebPackageWithNoBinary.yml

解決方法

有幾個問題:

  1. 您的配置中沒有 binaryname1
goos=$goos goarch=$goarch go build -o $binaryname1 $basepathforbinaryfile1

成為

GOOS=$GOOS GOARCH=$GOARCH go build -o cmd/main_1/

原始檔案應該位於目前目錄中,但實際上並不存在。您需要修復配置以擁有 binaryname1binaryname2 而不是 binaryname 兩次。

  1. 您需要將src目錄指定為./cmd/main_1/
  2. edit 1 部分cd 不起作用,因為環境名稱不正確,它應該是$basepathforbinaryfile1 但它是$basepathforbinaryfile

以上是在 gitlab-ci/cd 中製作 golang deb 時,...中沒有 Go 文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除