Upload Android (.apk), iOS (.ipa) and HarmonyOS (.hap) builds to PGYER for beta distribution, from Pipeline or Freestyle jobs. Maintained by PGYER.
- Uploads from the agent that built the app; nothing is copied to the controller.
- Waits until PGYER has published the build, then returns its download page and QR code.
- Keeps the API key in Jenkins credentials and out of the build log.
- Uses Jenkins' proxy settings, and falls back to PGYER's backup domains when
www.pgyer.comis unreachable.
Requires Jenkins 2.479.3 or newer.
- Copy your API key from https://www.pgyer.com/account/api.
- In Jenkins, add a Secret text credential holding the key, for example with the ID
pgyer-api-key. - Optionally, choose it as the default under Manage Jenkins » System » PGYER, so jobs don't have to name it.
pipeline {
agent any
stages {
stage('Build') {
steps {
sh './gradlew assembleRelease'
}
}
stage('Distribute') {
steps {
script {
def app = pgyerUpload file: 'app/build/outputs/apk/release/*.apk',
credentialsId: 'pgyer-api-key',
updateDescription: "Build ${env.BUILD_NUMBER}"
echo "Download page: ${app.appPgyerURL}"
echo "QR code: ${app.buildQRCodeURL}"
}
}
}
}
}
The key can also come from the PGYER_API_KEY environment variable:
withCredentials([string(credentialsId: 'pgyer-api-key', variable: 'PGYER_API_KEY')]) {
pgyerUpload file: 'build/*.ipa'
}
| Parameter | Description |
|---|---|
file |
Ant-style pattern relative to the workspace. Defaults to any .apk, .ipa or .hap file. If several match, the most recently modified one is uploaded. |
credentialsId |
Secret text credential with the API key. Defaults to PGYER_API_KEY, then to the global default. |
buildType |
android, ios or harmony. Only needed when the file extension is not .apk, .ipa or .hap. |
installType |
1 public, 2 password, 3 invitation only. Keeps the current setting of the app when not set. |
password |
Install password, used with installType: '2'. |
description |
Description of the app. |
updateDescription |
What changed in this build. |
channelShortcut |
Short URL of the download channel to publish to. |
installStartDate, installEndDate |
Limit installs to a date range, as yyyy-MM-dd. Set both or neither. |
oversea |
true to upload through overseas acceleration, false for mainland China. Chosen by IP address when not set. |
processingTimeout |
Seconds to wait for PGYER to publish the build after the upload. Default 600. |
pgyerUpload returns a map with everything PGYER reports about the published build, including:
| Key | Example |
|---|---|
buildName, buildVersion, buildBuildVersion |
My App, 1.2.0, 7 |
buildKey, buildShortcutUrl |
a1b2c3..., myapp |
appPgyerURL |
https://www.pgyer.com/myapp |
buildQRCodeURL |
URL of the QR code image |
The build page also shows the download link and QR code.
Add the Upload to PGYER build step or post-build action. As a post-build action it doesn't upload when the build failed.
After the upload, later build steps can use these environment variables: buildShortcutUrl, appPgyerURL, buildQRCodeURL, appQRCodeURL, buildKey, buildName, buildVersion and the other fields of the return value.
Set the job parameter isUploadPgyer to false to skip the upload.
unclassified:
pgyer:
credentialsId: pgyer-api-key
Upgrade from Manage Jenkins > Plugins, which also updates the plugins this one depends on if they are too old. Don't install the .hpi file by hand: Jenkins then doesn't update the dependencies, and reports Update required: ... when it starts. If you see that message, update the plugins it lists from the plugin manager. If the plugin manager says that one of them needs a newer version of Jenkins, upgrade Jenkins first.
Jobs configured with 2.x keep working without changes, including the environment variables they set and the isUploadPgyer and uploadPgyerTimeout variables they read. What changes:
- Builds on agents work: the file is now read and uploaded on the agent.
- The plugin waits up to 10 minutes for PGYER to publish the build, instead of about 15 seconds.
- The API key typed into a 2.x job is still used, but marked as deprecated. Move it to a Secret text credential and choose that credential in the job.
- Pipeline jobs use the new
pgyerUploadstep.
| Error | What to do |
|---|---|
1001, 1002 |
The API key is missing or wrong. Check it at https://www.pgyer.com/account/api. |
1003 |
Sub-accounts can't use the API. Use the API key of the main account. |
1019 |
Complete real-name verification at https://www.pgyer.com/account/certification. |
1020 |
Uploading is disabled for this account. Contact PGYER customer service. |
1022 |
The account storage is full or the file is too large. Free up space or upgrade your plan. |
still processing the build after 600 seconds |
The upload finished but publishing took longer than processingTimeout. The build may still appear in your PGYER app list; raise the timeout if this happens often. |
None of the PGYER API servers could be reached |
The agent can't reach www.pgyer.com, www.xcxwo.com or www.pgyerapp.com. Check its network and the proxy under Manage Jenkins » System » HTTP Proxy Configuration. |
The upload uses the proxy configured in Jenkins. Java doesn't send Basic credentials when tunnelling HTTPS through a proxy unless the agent JVM is started with -Djdk.http.auth.tunneling.disabledSchemes="".
Report bugs and feature requests at https://github.com/jenkinsci/upload-pgyer-plugin/issues.