首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Goreleaser中为每个目标设置`-ldflags` `值?

如何在Goreleaser中为每个目标设置`-ldflags` `值?
EN

Stack Overflow用户
提问于 2020-07-29 05:11:35
回答 1查看 230关注 0票数 4

我需要为每个构建目标设置Os/Arch变量。我最初的想法是有一个脚本来计算这些变量,并使用钩子在每个目标上运行这个脚本。

.goreleaser.yaml

代码语言:javascript
复制
builds:
  hooks:
    pre:
      - sh variables.sh
  ldflags:
    - -s -w -X "main.goversion={{.Env.GOVERSION}}"
    - -s -w -X "main.commit={{.Env.GITCOMMIT}}"
    - -s -w -X "main.os={{.Env.GOOS}}"
    - -s -w -X "main.arch={{.Env.GOARCH}}"
    - -s -w -X "main.commit={{.Env.GITCOMMIT}}"
    - -s -w -X "main.date={{.Env.BUILDTIME}}"

variables.sh

代码语言:javascript
复制
#!/bin/bash

export GITCOMMIT=${GITCOMMIT:-$(git rev-parse --short HEAD 2> /dev/null || true)}
export BUILDTIME=${BUILDTIME:-$(date -u +"%Y-%m-%dT%H:%M:%SZ")}
export GOOS="${GOOS:-$(go env GOHOSTOS)}"
export GOARCH="${GOARCH:-$(go env GOHOSTARCH)}"
export GOVERSION=$(go version | awk '{print $3;}')

但是由于变量没有在配置中的任何位置定义,所以它似乎无法识别它们,抛出:

代码语言:javascript
复制
release failed after 0.45s error=template: tmpl:1:31: executing "tmpl" at <.Env.GOVERSION>: map has no entry for key "GOVERSION"

这是有道理的。但现在我关心的是如何为每个目标设置特定于目标的变量?

EN

回答 1

Stack Overflow用户

发布于 2021-07-28 10:40:04

在这些钩子中导出的变量不会泄漏给构建器本身。

但是,您可以执行以下操作:

代码语言:javascript
复制
source variables.sh
goreleaser release --rm-dist

并且变量应该在模板上的.Env映射中可用。

PS:你不需要设置GOOSGOARCH,GoReleaser会为你做这些。

PPS:build time and commit are available as native template variables/functions

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63142826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档