我正试图使我的Go项目的Linux可执行文件。我在我的gitlab项目的.config-ci.yml
中有以下配置:
demo_job_1:
tags:
- cpf
- cpf-test
- testing
- unit-testing
script:
- go run test/main.go
- GOOS=linux GOARCH=amd64 go build
- go env
- cd test
- ./test
- echo Successfully run and Built
在运行这个管道之后,当我签入env文件时,我仍然得到GOOS=windows。我如何构建我的项目,使构建后的输出是Linux可执行文件。现在,我得到的。exe文件只能在Windows上运行。
你可以在下面的gitlab中看到项目的详细信息:
https://gitlab.com/smilekison/test
这是Pipeline Job显示的错误:$ go run test/main.go
Hello world
$ GOOS=linux GOARCH=amd64 go build
GOOS=linux : The term 'GOOS=linux' is not recognized as the name of a cmdlet, function, script file, or operable
program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:WINDOWSTEMPbuild_script487326907script.ps1:207 char:1
+ GOOS=linux GOARCH=amd64 go build
+ ~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (GOOS=linux:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
首先要解决您的实际错误:似乎您是基于windows的运行器。这意味着你必须使用windows CMD命令。它不知道ENV等
你可以用go env -w GOOS="linux"
代替。GOARCH也是如此。然后运行go build .
您还可以使用变量部分用环境变量覆盖go env
:
variables:
GOOS: "linux"
GOARCH: "amd64"
它位于gitlab文件顶部的某个地方。
这是我使用docker容器的Go项目的典型构建管道:
build_App:
image: golang:1.15.3
stage: build
allow_failure: false
tags:
- unix
script:
- go mod download
- mkdir $CI_PROJECT_DIR/release
- cd cmd/app
- GOOS=linux GOARCH=amd64 go build -o $CI_PROJECT_DIR/release/app .
artifacts:
paths:
- $CI_PROJECT_DIR/release
和测试管道
go_test:
image: golang:1.15.3
stage: verify
allow_failure: false
tags:
- unix
script:
- go mod download
- go test -race -cover ./...
这是基于一个使用docker镜像构建的运行器。
我需要写go env -w GOOS="linux"GOARCH ="amd64">为linux创建可执行文件如果我想为windows创建可执行文件我只需要重命名linuxwindows 我可以使用image: golang:1.15.7安装go语言。这边是我的。gitlab-ci。yml文件可以得到GO Lang安装,可以运行任何GO命令。
demo_job_1:
stages:
-build
build:
stage: build
image : golang:1.15.7
tags:
- cpf
- cpf-test
- testing
- unit-testing
script:
- go run test/main.go
- go env -w GOOS=linux GOARCH=amd64
- go env
- cd test
- ./test
- echo Successfully run and Built