如何在 Jenkins 中将环境变量 URL 字符串传递给 Gradle 任务?

问题描述 投票:0回答:1

问题: 如何将环境变量传递给 Jenkins 中的 gradle 任务?需要“我的 Jenkins 工作如何运作”中第 3 步的帮助

我所做的研究:
如何通过Task在Gradle中设置环境变量?
在 Gradle 中传递命令行参数
将作业参数传递给脚本化管道中的 gradle 任务

我的 Jenkins 工作如何运作:

  1. 我有一个参数,允许将文件上传到个人云存储
  2. 然后它会从云存储返回指向该特定文件的 URL 链接,并将其存储在环境变量中:
    APK_URL

    2)示例链接:https://my-storage.com/5/fileVersion/12345.apk
output=$(curl -F file=@"$WORKSPACE/build/SomeProject" -H "Retention: $RETENTION_DAYS" [https://www.myCloudServer.online/fileuploader?key=$MY_KEY](https://www.myCloudServer.online/fileuploader?key=$MY_KEY))
APK_URL=$(echo "$output" | sed -n 's/.*"file_url":"\([^"]*\)".*/\1/p' | sed 's/\\//g')
echo "APK URL": ${env.APK_URL}"
    然后将
  1. APK_URL
     变量传递给 gradle 命令,该命令接收 url 字符串以对其运行自动化。 
    -DbuildUrl=${env.APK.URL}
    需要明确的是,当我在本地执行此操作时,这是有效的,因此我知道在此处传递 URL 是有效的。我只是想在 Jenkins 中完成同样的事情。
clean test --tests "appium.some.app.Tests.*"  -DincludeTags=$RUN_TYPE -DwebhookUrl=[https://hooks.slack.com/services/someSlackChannel](https://hooks.slack.com/services/someSlackChannel) -DbuildUrl=${env.APK_URL}

    自动化开始
詹金斯配置


错误日志

*我更改了一些错误的读取方式,例如网址和任何其他敏感信息

15:11:29 Copying file to build/SomeAppFile 15:11:34 [verify-android] $ /bin/sh -xe /tmp/jenkins84982492834209384.sh 15:11:34 + curl -F file=@/home/jenkins/workspace/my-workSpace/validate/verify-android/build/SomeAppFile -H Retention: https://www.myCloudStorage.online/f1euploader?key=[***********] 15:11:34 % Total % Received % Xferd Average Speed Time Time Time Current 15:11:34 Dload Upload Total Spent Left Speed 15:11:37 15:11:37 + output={"file_url":"https:\/\/www.myCloudStorage.online\/11\//SomeApplicationFile","retention_days":11,"release_pending":false,"results":"success","time_of_release":-1} 15:11:37 + echo {"file_url":"https:\/\/www.myCloudStorage.online\/11\//SomeApplicationFile","retention_days":11,"release_pending":false,"results":"success","time_of_release":-1} 15:11:37 + sed -n s/.*"file_url":"\([^"]*\)".*/\1/p 15:11:37 + sed s/\\//g 15:11:37 + APK_URL=https://www.myCloudStorage.online/11/SomeApplicationFile 15:11:37 + echo https://www.myCloudStorage.online/11/SomeApplicationFile 15:11:37 https://www.myCloudStorage.online/11/SomeApplicationFile 15:11:37 [Gradle] - Launching build. 15:11:37 [qae-verify-android-build] $ "/home/jenkins/workspace/my-workspace/validate/verify-android/gradlew" clean test --tests com.some.app.TESTS.* -DincludeTags=smoke -DwebhookUrl=https://hook.slack.com/services/98asdf9a87fg9a87fg9a87fga989f98 -DbuildUrl=${env.APK_URL} 15:11:38 Starting a Gradle Daemon, 1 busy Daemon could not be reused, use --status for details 15:11:44 > Task :clean 15:11:44 > Task :compileJava NO-SOURCE 15:11:44 > Task :processResources NO-SOURCE 15:11:44 > Task :classes UP-TO-DATE 15:11:54 15:11:54 > Task :compileTestJava 15:11:54 Note: Some input files use unchecked or unsafe operations. 15:11:54 Note: Recompile with -Xlint:unchecked for details. 15:11:58 15:11:58 > Task :processTestResources 15:11:58 > Task :testClasses 15:12:01 15:12:01 > Task :test 15:12:01 15:12:01 Gradle Test Executor 1 STANDARD_ERROR 15:12:01 SLF4J: No SLF4J providers were found. 15:12:01 SLF4J: Defaulting to no-operation (NOP) logger implementation 15:12:01 SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details. 15:12:01 SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier. 15:12:01 SLF4J: Ignoring binding found at [jar:file:/home/jenkins/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-log4j12/1.7.5/6edffc576ce104ec769d954618764f39f0f0f10d/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] 15:12:01 SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation. 15:13:29 15:13:29 SomeRandomAndroidUiTest STANDARD_ERROR 15:13:29 com.synergy.core.exceptions.SessionNotStartedException: Failed to start session after 3 attempts with results: [[{"results":"Session 525356b3-bd65-40bf-b9cb-fb855a4e2404 failed to start with error: Failed to decode app package file at ${env.APK_URL}. The AppPackage capability must be either a valid url to an Android APK package OR a valid file path to an Android APK package!"},{"results":"Session 525356b3-bd65-40bf-b9cb-fb855a4e2404 failed to start with error: Session 525356b3-bd65-40bf-b9cb-fb855a4e2404 did not have any entries in the device proxy log after app launch. This is indicative of a network\/proxy issue with your device under test. To disable this check set the VerifyNetworkConnectivity capability to false."}],[{"results":"Session a511602d-14ca-434f-9d96-93faf9ff5fb5 failed to start with error: Failed to decode app package file at ${env.APK_URL}. The AppPackage capability must be either a valid url to an Android APK package OR a valid file path to an Android APK package!"}],[{"results":"Session 5abd7803-4661-4cbb-aed7-d41ef0718f42 failed to start with error: Failed to decode app package file at ${env.APK_URL}. The AppPackage capability must be either a valid url to an Android APK package OR a valid file path to an Android APK package!"}]]
    
bash shell gradle jenkins jenkins-groovy
1个回答
0
投票
您已经超越了 gradle 插件的 Jenkins 模型,它鼓励独立的可重复构建。一旦您从云等其他地方获取东西,它就不是一个独立的可重复构建。

有一个环境变量插件,可能对您有帮助,但我建议,不要使用 gradle 任务,使用 shell 任务,然后像原来一样输入命令,小心退出失败如果任何阶段失败,则退出代码。

APK_URL=$(curl -F file=@"$WORKSPACE/build/SomeProject" -H "Retention: $RETENTION_DAYS" [https://www.myCloudServer.online/fileuploader?key=$MY_KEY](https://www.myCloudServer.online/fileuploader?key=$MY_KEY) | sed -n 's/.*"file_url":"\([^"]*\)".*/\1/p' | sed 's/\\//g') && ./gradlew clean test --tests "appium.some.app.Tests.*" -DincludeTags=$RUN_TYPE -DwebhookUrl=[https://hooks.slack.com/services/someSlackChannel](https://hooks.slack.com/services/someSlackChannel) -DbuildUrl=${APK_URL}
    
© www.soinside.com 2019 - 2024. All rights reserved.