在 Prow CI 中上传到 Codacy 时消息 header 值中的非法字符
Illegal character(s) in message header value while uploading to Codacy in Prow CI
我有我的 Kotlin 项目的 jacoco 代码覆盖率报告,我正在将其上传到 Codacy。
我正在使用 codacy-coverage-reporter 7.1.0 并使用以下 gradle 任务上传报告。
task("uploadTestCoverageReportToCodacy", JavaExec::class) {
dependsOn("codeCoverageReport")
main = "com.codacy.CodacyCoverageReporter"
classpath = codacy
args = arrayListOf(
"report",
"-l",
"Kotlin",
"-r",
"$buildDir/reports/jacoco/jacocoTestReport.xml")
}
任务“codeCoverageReport”已成功完成,而且我在我的 PROW CI.
中配置了 CODACY_PROJECT_TOKEN
我面临的问题是以下消息:
Exception in thread "main" java.lang.IllegalArgumentException: Illegal character(s) in message header value: <CODACY_PROJECT_TOKEN> (the token value)
at java.base/sun.net.www.protocol.http.HttpURLConnection.checkMessageHeader(HttpURLConnection.java:559)
at java.base/sun.net.www.protocol.http.HttpURLConnection.isExternalMessageHeaderAllowed(HttpURLConnection.java:494)
at java.base/sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(HttpURLConnection.java:3174)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestProperty(HttpsURLConnectionImpl.java:312)
at scalaj.http.HttpRequest.$anonfun$doConnection(Http.scala:359)
at scalaj.http.HttpRequest.$anonfun$doConnection$adapted(Http.scala:358)
at scala.collection.immutable.List.foreach(List.scala:392)
at scalaj.http.HttpRequest.doConnection(Http.scala:358)
at scalaj.http.HttpRequest.exec(Http.scala:343)
at scalaj.http.HttpRequest.asString(Http.scala:491)
at com.codacy.api.client.CodacyClient.post(CodacyClient.scala:71)
at com.codacy.api.service.CoverageServices.postRequest(CoverageServices.scala:91)
at com.codacy.api.service.CoverageServices.sendReport(CoverageServices.scala:27)
at com.codacy.rules.ReportRules.sendReport(ReportRules.scala:128)
at com.codacy.rules.ReportRules.$anonfun$codacyCoverage(ReportRules.scala:54)
at scala.util.Either.flatMap(Either.scala:341)
at com.codacy.rules.ReportRules.$anonfun$codacyCoverage(ReportRules.scala:53)
at scala.util.Either.flatMap(Either.scala:341)
at com.codacy.rules.ReportRules.$anonfun$codacyCoverage(ReportRules.scala:52)
at scala.util.Either.flatMap(Either.scala:341)
at com.codacy.rules.ReportRules.$anonfun$codacyCoverage(ReportRules.scala:51)
at scala.util.Either.flatMap(Either.scala:341)
at com.codacy.rules.ReportRules.$anonfun$codacyCoverage(ReportRules.scala:50)
at scala.collection.immutable.List.map(List.scala:286)
at com.codacy.rules.ReportRules.$anonfun$codacyCoverage(ReportRules.scala:47)
at scala.util.Either.flatMap(Either.scala:341)
at com.codacy.rules.ReportRules.$anonfun$codacyCoverage(ReportRules.scala:40)
at com.codacy.rules.ReportRules.$anonfun$withCommitUUID(ReportRules.scala:267)
at com.codacy.rules.ReportRules.$anonfun$withCommitUUID$adapted(ReportRules.scala:267)
at scala.util.Either.flatMap(Either.scala:341)
at com.codacy.rules.ReportRules.withCommitUUID(ReportRules.scala:267)
at com.codacy.rules.ReportRules.codacyCoverage(ReportRules.scala:35)
at com.codacy.CodacyCoverageReporter$.$anonfun$sendReport(CodacyCoverageReporter.scala:41)
at scala.util.Either.flatMap(Either.scala:341)
at com.codacy.CodacyCoverageReporter$.sendReport(CodacyCoverageReporter.scala:33)
at com.codacy.CodacyCoverageReporter$.run(CodacyCoverageReporter.scala:18)
at com.codacy.configuration.parser.ConfigurationParsingApp.run(ConfigurationParser.scala:13)
at com.codacy.configuration.parser.ConfigurationParsingApp.run(ConfigurationParser.scala:11)
at caseapp.CommandAppWithPreCommand.$anonfun$main(CommandAppWithPreCommand.scala:97)
at caseapp.CommandAppWithPreCommand.$anonfun$main$adapted(CommandAppWithPreCommand.scala:82)
at scala.Option.foreach(Option.scala:407)
at caseapp.CommandAppWithPreCommand.main(CommandAppWithPreCommand.scala:82)
at com.codacy.CodacyCoverageReporter.main(CodacyCoverageReporter.scala)
我仔细检查了 codacy 标记是否正确,没有任何前导或尾随 space 或任何奇怪的字符。
有人知道为什么上传到 codacy 有这个问题吗?请注意,此 gradle 任务在本地机器上运行良好,但它在 CI.
中产生问题
CI 正在用新行注入令牌。我使用以下方法解决了这个问题:
task("uploadTestCoverageReportToCodacy", JavaExec::class) {
dependsOn("codeCoverageReport")
main = "com.codacy.CodacyCoverageReporter"
classpath = codacy
args = arrayListOf(
"report",
"-t",
System.getenv("CODACY_PROJECT_TOKEN")?.trim() ?: "",
"-l",
"Kotlin",
"-r",
"$buildDir/reports/jacoco/jacocoTestReport.xml")
}
我有我的 Kotlin 项目的 jacoco 代码覆盖率报告,我正在将其上传到 Codacy。
我正在使用 codacy-coverage-reporter 7.1.0 并使用以下 gradle 任务上传报告。
task("uploadTestCoverageReportToCodacy", JavaExec::class) {
dependsOn("codeCoverageReport")
main = "com.codacy.CodacyCoverageReporter"
classpath = codacy
args = arrayListOf(
"report",
"-l",
"Kotlin",
"-r",
"$buildDir/reports/jacoco/jacocoTestReport.xml")
}
任务“codeCoverageReport”已成功完成,而且我在我的 PROW CI.
中配置了 CODACY_PROJECT_TOKEN我面临的问题是以下消息:
Exception in thread "main" java.lang.IllegalArgumentException: Illegal character(s) in message header value: <CODACY_PROJECT_TOKEN> (the token value)
at java.base/sun.net.www.protocol.http.HttpURLConnection.checkMessageHeader(HttpURLConnection.java:559)
at java.base/sun.net.www.protocol.http.HttpURLConnection.isExternalMessageHeaderAllowed(HttpURLConnection.java:494)
at java.base/sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(HttpURLConnection.java:3174)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestProperty(HttpsURLConnectionImpl.java:312)
at scalaj.http.HttpRequest.$anonfun$doConnection(Http.scala:359)
at scalaj.http.HttpRequest.$anonfun$doConnection$adapted(Http.scala:358)
at scala.collection.immutable.List.foreach(List.scala:392)
at scalaj.http.HttpRequest.doConnection(Http.scala:358)
at scalaj.http.HttpRequest.exec(Http.scala:343)
at scalaj.http.HttpRequest.asString(Http.scala:491)
at com.codacy.api.client.CodacyClient.post(CodacyClient.scala:71)
at com.codacy.api.service.CoverageServices.postRequest(CoverageServices.scala:91)
at com.codacy.api.service.CoverageServices.sendReport(CoverageServices.scala:27)
at com.codacy.rules.ReportRules.sendReport(ReportRules.scala:128)
at com.codacy.rules.ReportRules.$anonfun$codacyCoverage(ReportRules.scala:54)
at scala.util.Either.flatMap(Either.scala:341)
at com.codacy.rules.ReportRules.$anonfun$codacyCoverage(ReportRules.scala:53)
at scala.util.Either.flatMap(Either.scala:341)
at com.codacy.rules.ReportRules.$anonfun$codacyCoverage(ReportRules.scala:52)
at scala.util.Either.flatMap(Either.scala:341)
at com.codacy.rules.ReportRules.$anonfun$codacyCoverage(ReportRules.scala:51)
at scala.util.Either.flatMap(Either.scala:341)
at com.codacy.rules.ReportRules.$anonfun$codacyCoverage(ReportRules.scala:50)
at scala.collection.immutable.List.map(List.scala:286)
at com.codacy.rules.ReportRules.$anonfun$codacyCoverage(ReportRules.scala:47)
at scala.util.Either.flatMap(Either.scala:341)
at com.codacy.rules.ReportRules.$anonfun$codacyCoverage(ReportRules.scala:40)
at com.codacy.rules.ReportRules.$anonfun$withCommitUUID(ReportRules.scala:267)
at com.codacy.rules.ReportRules.$anonfun$withCommitUUID$adapted(ReportRules.scala:267)
at scala.util.Either.flatMap(Either.scala:341)
at com.codacy.rules.ReportRules.withCommitUUID(ReportRules.scala:267)
at com.codacy.rules.ReportRules.codacyCoverage(ReportRules.scala:35)
at com.codacy.CodacyCoverageReporter$.$anonfun$sendReport(CodacyCoverageReporter.scala:41)
at scala.util.Either.flatMap(Either.scala:341)
at com.codacy.CodacyCoverageReporter$.sendReport(CodacyCoverageReporter.scala:33)
at com.codacy.CodacyCoverageReporter$.run(CodacyCoverageReporter.scala:18)
at com.codacy.configuration.parser.ConfigurationParsingApp.run(ConfigurationParser.scala:13)
at com.codacy.configuration.parser.ConfigurationParsingApp.run(ConfigurationParser.scala:11)
at caseapp.CommandAppWithPreCommand.$anonfun$main(CommandAppWithPreCommand.scala:97)
at caseapp.CommandAppWithPreCommand.$anonfun$main$adapted(CommandAppWithPreCommand.scala:82)
at scala.Option.foreach(Option.scala:407)
at caseapp.CommandAppWithPreCommand.main(CommandAppWithPreCommand.scala:82)
at com.codacy.CodacyCoverageReporter.main(CodacyCoverageReporter.scala)
我仔细检查了 codacy 标记是否正确,没有任何前导或尾随 space 或任何奇怪的字符。
有人知道为什么上传到 codacy 有这个问题吗?请注意,此 gradle 任务在本地机器上运行良好,但它在 CI.
中产生问题CI 正在用新行注入令牌。我使用以下方法解决了这个问题:
task("uploadTestCoverageReportToCodacy", JavaExec::class) {
dependsOn("codeCoverageReport")
main = "com.codacy.CodacyCoverageReporter"
classpath = codacy
args = arrayListOf(
"report",
"-t",
System.getenv("CODACY_PROJECT_TOKEN")?.trim() ?: "",
"-l",
"Kotlin",
"-r",
"$buildDir/reports/jacoco/jacocoTestReport.xml")
}