Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apabila membuat deb golang dalam gitlab-ci/cd, tiada fail Go dalam...

Apabila membuat deb golang dalam gitlab-ci/cd, tiada fail Go dalam...

王林
王林ke hadapan
2024-02-13 13:50:09504semak imbas

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

PHP editor Xigua akan memperkenalkan anda kepada masalah biasa apabila membuat golang deb dalam gitlab-ci/cd. Kadang-kadang, apabila kami cuba membuat pakej deb golang dalam gitlab-ci/cd, kami mungkin menghadapi ralat bahawa "No Go file in...". Sebab ralat ini adalah kerana tiada fail Go dalam direktori akar projek. Seterusnya, kami akan menerangkan kepada anda secara terperinci bagaimana untuk menyelesaikan masalah ini supaya anda berjaya membuat pakej deb golang.

Kandungan soalan

Ini mengenai golang, yang kodnya saya gunakan dalam fail gitlab-ci.yml. Ini adalah ralat yang saya alami /builds/release_management no go fail seperti ini:

$ 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

Ini kod kerja saya

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

Sila ambil perhatian: Saya juga cuba memberi $ci_project_dir/$basepathforbinaryfile1 tetapi itu tidak berjaya juga.

Walaupun, ini hanya berfungsi apabila saya mula-mula membuat cd dan kemudian menggunakan dot(.) untuk membinanya daripada semasa

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 .

Ini ialah struktur folder saya:

Ada idea apa yang perlu saya betulkan untuk membetulkan ralat golang ini?

Edit 1: Selain itu, apabila melakukan cd $ci_project_dir/$basepathforbinaryfile 然后执行 ls ia tidak masuk ke dalam direktori itu dan masih hanya menunjukkan kandungan direktori asas:

$ 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

Penyelesaian

mempunyai sedikit masalah:

  1. Tidak binaryname1
  2. dalam konfigurasi anda
goos=$goos goarch=$goarch go build -o $binaryname1 $basepathforbinaryfile1

menjadi

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

Fail sumber sepatutnya berada dalam direktori semasa, tetapi tidak. Anda perlu membetulkan konfigurasi anda untuk mempunyai binaryname1binaryname2 而不是 binaryname dan binaryname2 dan bukannya binaryname dua kali.

  1. Anda perlu menentukan direktori src sebagai ./cmd/main_1/.
  2. di edit 1 部分 cd 不起作用,因为环境名称不正确,它应该是 $basepathforbinaryfile1 但它是 $basepathforbinaryfile.

Atas ialah kandungan terperinci Apabila membuat deb golang dalam gitlab-ci/cd, tiada fail Go dalam.... Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam