28

I'm searching for a way to upload a build artifact as Github Release in Jenkins as post-build action or publisher - similar to Publish Over.

This is not yet supported by the Github plugin for Jenkins (JENKINS-18598).

I've been looking into the postbuild-task plugin, but this doesn't seem to support environment variables (which I assume would be helpful to prevent logging my API token in the build output).

Has anybody done this, yet? What would be a good way to solve this with Jenkins? Uploading via cURL or via a CLI client (e.g. the Go-based github-release).

StephenKing
  • 36,187
  • 11
  • 83
  • 112

2 Answers2

30

I solved it by using the github-release tool. Works like a charm and very easy.

  1. Add a relevant parameters to the build
  2. Add a shell script to your post build steps
  3. Enter this code:
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
StephenKing
  • 36,187
  • 11
  • 83
  • 112
Asaf Shveki
  • 736
  • 8
  • 11
17

I think you are on track!

  1. Add the post build task plugin to Jenkins
  2. Use the 'Run script only if all previous steps were successful' option
  3. I would create Jenkins parameters for the release name, tag name etc. and would save those along with your credentials to a file as a last step in the build process (before the post build task execution).
  4. Add a short script to the post build task step that calls the Github API:
  5. Set the environment variables from your saved file and delete it
  6. CURL POST for https://developer.github.com/v3/repos/releases/#create-a-release (You could use the Jenkings Groovy post build plugin instead of the post build task plugin and access the environment variables without saving them into a file but it would add so much complexity that it is not worth to use that plugin.)
  7. CURL POST to upload the artifact: https://developer.github.com/v3/repos/releases/#upload-a-release-asset
Andrew
  • 331
  • 1
  • 5
  • Thanks for your sketches, this was what I had mostly on mind. I've tried with a Groovy post-build script (using [HTTPBUilder](http://groovy.codehaus.org/modules/http-builder/home.html)), but that [fails](http://groovy.codehaus.org/modules/http-builder/home.html). I will have to for the CURL version and also try to set the environment variables. – StephenKing Jul 11 '14 at 13:18