Golang构建选项的配置文件如何配置?

Golang构建选项的配置文件如何配置? 我正在尝试使用Travis CI构建一个多发行版的可执行文件,该文件会将构建好的可执行文件发布到GitHub。

我希望文件命名格式为 somename.os.arch。
当我在本地通过命令行构建时,我使用 -o 参数以及环境变量 $GOOS$GOARCH,例如:go build -o somename.$GOOS.$GOARCH

但是,我无法在TravisCI中使用他们的 build_args 来指定这个参数,因为其他步骤会失败(无法理解 -o 标志)。

是否有可以创建的Go构建配置文件来设置构建输出名称?

2 回复

你好

我不太了解 Travis CI,但这个可能有用?

https://docs.travis-ci.com/user/environment-variables/#defining-multiple-variables-per-item

更多关于Golang构建选项的配置文件如何配置?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,没有内置的构建配置文件来直接设置输出名称,但可以通过环境变量和脚本自动化构建过程。对于Travis CI,建议使用脚本步骤来替代build_args,从而灵活控制构建参数。

以下是一个示例的.travis.yml配置,展示如何通过脚本构建多平台的可执行文件并设置输出名称:

language: go

go:
  - "1.x"  # 指定Go版本,例如1.18

env:
  global:
    - PROJECT_NAME=somename

script:
  - |
    for GOOS in linux darwin windows; do
      for GOARCH in amd64 arm64; do
        # 检查平台组合是否有效(例如,Windows on ARM64可能不支持)
        if [ "$GOOS" = "windows" ] && [ "$GOARCH" = "arm64" ]; then
          continue
        fi
        export GOOS GOARCH
        OUTPUT="${PROJECT_NAME}.${GOOS}.${GOARCH}"
        if [ "$GOOS" = "windows" ]; then
          OUTPUT="${OUTPUT}.exe"
        fi
        go build -o "$OUTPUT" .
        echo "构建完成: $OUTPUT"
      done
    done

deploy:
  provider: releases
  api_key: $GITHUB_TOKEN
  file_glob: true
  file: "${PROJECT_NAME}.*"
  skip_cleanup: true
  on:
    tags: true

在这个配置中:

  • 使用env全局变量定义项目名称。
  • script部分,通过嵌套循环遍历GOOSGOARCH的组合,动态生成输出文件名。
  • 对于Windows平台,自动添加.exe扩展名。
  • 使用条件检查跳过无效的平台组合(如Windows on ARM64,如果不需要可以移除)。
  • deploy部分,通过file_glob上传所有匹配的可执行文件到GitHub Releases。

确保在Travis CI中设置GITHUB_TOKEN环境变量(具有发布权限的GitHub个人访问令牌)。这种方法避免了build_args的限制,并允许完全控制构建过程。

如果项目结构复杂,可以使用Makefile来封装构建逻辑,然后在Travis中调用make命令。例如,创建一个Makefile

PROJECT_NAME = somename

build-multi:
    for GOOS in linux darwin windows; do \
        for GOARCH in amd64 arm64; do \
            if [ "$$GOOS" = "windows" ] && [ "$$GOARCH" = "arm64" ]; then \
                continue; \
            fi; \
            OUTPUT="$(PROJECT_NAME).$$GOOS.$$GOARCH"; \
            if [ "$$GOOS" = "windows" ]; then \
                OUTPUT="$$OUTPUT.exe"; \
            fi; \
            GOOS=$$GOOS GOARCH=$$GOARCH go build -o $$OUTPUT .; \
            echo "构建完成: $$OUTPUT"; \
        done; \
    done

然后在.travis.ymlscript部分运行make build-multi。这提高了可维护性,尤其适用于多个构建目标的情况。

回到顶部