【问题标题】:Upload build artifact to Github as release in Jenkins将构建工件上传到 Github 作为 Jenkins 中的发布
【发布时间】:2014-08-26 11:03:34
【问题描述】:

我正在寻找一种在 Jenkins 中将构建工件上传为 Github Release 作为构建后操作或发布者的方法 - 类似于 Publish Over

Jenkins 的 Github 插件 (JENKINS-18598) 尚不支持此功能。

我一直在研究 postbuild-task 插件,但这似乎不支持环境变量(我认为这有助于防止在构建输出中记录我的 API 令牌)。

有人做过吗?用 Jenkins 解决这个问题的好方法是什么?通过 cURL 或 CLI 客户端(例如基于 Go 的 github-release)上传。

【问题讨论】:

    标签: github jenkins release


    【解决方案1】:

    我使用github-release 工具解决了这个问题。 像魅力一样工作,非常容易。

    1. 在构建中添加相关参数
    2. 在您的后期构建步骤中添加一个 shell 脚本
    3. 输入此代码:
    echo "Compressing artifacts into one file"
    zip -r artifacts.zip artifacts_folder
    
    echo "Exporting token and enterprise api to enable github-release tool"
    export GITHUB_TOKEN=$$$$$$$$$$$$
    export GITHUB_API=https://git.{your domain}.com/api/v3 # needed only for enterprise
    
    echo "Deleting release from github before creating new one"
    github-release delete --user ${GITHUB_ORGANIZATION} --repo ${GITHUB_REPO} --tag ${VERSION_NAME}
    
    echo "Creating a new release in github"
    github-release release --user ${GITHUB_ORGANIZATION} --repo ${GITHUB_REPO} --tag ${VERSION_NAME} --name "${VERSION_NAME}"
    
    echo "Uploading the artifacts into github"
    github-release upload --user ${GITHUB_ORGANIZATION} --repo ${GITHUB_REPO} --tag ${VERSION_NAME} --name "${PROJECT_NAME}-${VERSION_NAME}.zip" --file artifacts.zip
    

    【讨论】:

    【解决方案2】:

    我认为你走上了正轨!

    1. 将构建后任务插件添加到 Jenkins
    2. 使用“仅在之前的所有步骤都成功时运行脚本”选项
    3. 我将为发布名称、标签名称等创建 Jenkins 参数,并将这些参数与您的凭据一起保存到文件中,作为构建过程的最后一步(在构建后任务执行之前)。
    4. 在调用 Github API 的构建后任务步骤中添加一个简短的脚本:
    5. 从您保存的文件中设置环境变量并将其删除
    6. https://developer.github.com/v3/repos/releases/#create-a-release 的 CURL POST(您可以使用 Jenkings Groovy 后期构建插件而不是后期构建任务插件并访问环境变量而不将它们保存到文件中,但这会增加太多复杂性以至于不值得使用那个插件。)
    7. CURL POST 上传工件:https://developer.github.com/v3/repos/releases/#upload-a-release-asset

    【讨论】:

    • 感谢您的草图,这是我的主要想法。我尝试过使用 Groovy 构建后脚本(使用 HTTPBUilder),但是 fails。我将不得不为 CURL 版本设置环境变量。
    最近更新 更多