如何在本地构建deb文件的goreleaser脚本

117次阅读
没有评论

问题描述

是一个完全的Golang新手,他想修改一个Go构建脚本,以便在本地构建文件,而不是将其发布到GitHub。他提供了一个包含.goreleaser.yml的GitHub链接,同时他也在一个fork中创建了一个包含Dockerfile的仓库。然而,在运行脚本时,他遇到了一些错误,不知道如何修改.goreleaser.yml文件。

解决方案

以下方案提供了多个解决途径,请根据具体情况选择其中一种方法。

方案1:使用goreleaser进行本地构建

  1. 克隆仓库:首先,使用以下命令克隆用户的仓库到本地:
    bash
    git clone <仓库链接>
    cd <仓库目录>

  2. 运行Dry Run:在终端中执行以下命令以执行Dry Run(测试在进行实际发布之前的所有步骤):
    bash
    goreleaser release --skip-publish

    这将显示当前配置的各个步骤是否出错。如果一切顺利,你将看到类似以下的输出:
    • releasing using goreleaser 0.117.1...
    • loading config file file=.goreleaser.yml
    • RUNNING BEFORE HOOKS
    • LOADING ENVIRONMENT VARIABLES
    • pipe skipped error=publishing is disabled
    • GETTING AND VALIDATING GIT STATE
    • releasing v1.0.5, commit d47a87ff8c671ec70b99a125fd6aadc45949905d
    • pipe skipped error=disabled during snapshot mode
    • PARSING TAG
    • SETTING DEFAULTS
    • LOADING ENVIRONMENT VARIABLES
    • SNAPSHOTING
    • GITHUB/GITLAB/GITEA RELEASES
    • PROJECT NAME
    • BUILDING BINARIES
    • ARCHIVES
    • DEPRECATED: archive should not be used anymore, check https://goreleaser.com/deprecations#archive for more info.
    • LINUX PACKAGES WITH NFPM
    • DEPRECATED: nfpm should not be used anymore, check https://goreleaser.com/deprecations#nfpm for more info.
    • SNAPCRAFT PACKAGES
    • CALCULATING CHECKSUMS
    • SIGNING ARTIFACTS
    • DOCKER IMAGES
    • pipe skipped error=docker section is not configured
    • PUBLISHING
    • pipe skipped error=publishing is disabled
    • release succeeded after 20.75s

  3. 执行发布:如果Dry Run 没有问题,你可以执行以下命令来进行实际发布:
    bash
    goreleaser release

    这将在你的项目文件夹中创建一个名为dist的文件夹,其中包含构建的发行包(deb、rpm等)。

  4. 解决问题:如果你遇到以下一些常见问题,可以尝试以下方法解决:

  5. 缺少 GITHUB_TOKEN、GITLAB_TOKEN 或 GITEA_TOKEN:创建相应的 GitHub 或 GitLab token,并将其设置为环境变量,例如:
    bash
    export GITHUB_TOKEN=xxxxyyyyyzzzzz
  6. dep ensure 预处理失败:确保 $GOPATH 指向正确的 Go 项目路径,以及正确配置了 goreleaser.yml 中的 hooks:pre
  7. dist 文件夹非空:手动删除 dist 文件夹,或在执行 goreleaser 命令时添加 --rm-dist 标志,例如:
    bash
    goreleaser release --skip-publish --rm-dist
  8. rpmbuild 不存在:如果在 macOS 上运行,可能需要先安装 rpm,可以使用 Homebrew 安装:
    bash
    brew install rpm
  9. git 处于脏状态:将更新的内容提交到 Git,确保工作区干净。
  10. git tag 与 commit 不匹配:确保 Git 标签符合语义化版本规范,并匹配提交。如果需要修改标签,可以使用 Git 命令进行修改。

方案2:手动构建

如果你想更灵活地控制构建过程,你也可以手动执行构建步骤:
1. 进入你的项目目录。

  1. 执行 dep ensure 或其他类似的命令来处理依赖。

  2. 手动执行编译步骤,例如:
    bash
    go build -o <输出文件名>

  3. 如果需要,手动构建发行包,例如:

  4. 对于 deb 包,可以使用工具如 dpkg-deb 进行构建。
  5. 对于 rpm 包,可以使用工具如 rpmbuild 进行构建。

无论选择哪种方式,都可以根据你的需求对构建流程进行自定义和调整。

注意:在使用 Goreleaser 或手动构建时,建议事先阅读相关文档和教程,以便更好地了解每个步骤的配置和操作。

请注意:根据用户反馈,上述方案可能包含不同环境和需求的解决途径。根据你的情况选择适合的方案,如果需要进一步的帮助,请随时提问或寻求更多支持。

正文完