unbroken-dome / gradle-helm-plugin Goto Github PK
View Code? Open in Web Editor NEWA Gradle plugin for building, publishing and managing Helm charts.
License: MIT License
A Gradle plugin for building, publishing and managing Helm charts.
License: MIT License
The helmPublish
task always fails with the following error:
Could not determine the dependencies of task ':helmPublishMainChartToExpRepo'.
> Expected configuration ':helmMain' to contain exactly one file, however, it contains no files.
What am I doing wrong?
Environment
LMTC-JFARR:repro jfarr1$ ./gradlew --version
------------------------------------------------------------
Gradle 5.1.1
------------------------------------------------------------
Build time: 2019-01-10 23:05:02 UTC
Revision: 3c9abb645fb83932c44e8610642393ad62116807
Kotlin DSL: 1.1.1
Kotlin: 1.3.11
Groovy: 2.5.4
Ant: Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM: 1.8.0_171 (Oracle Corporation 25.171-b11)
OS: Mac OS X 10.12.6 x86_64
LMTC-JFARR:repro jfarr1$ helm version
Client: &version.Version{SemVer:"v2.12.3", GitCommit:"eecf22f77df5f65c823aacd2dbd30ae6c65f186e", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.12.3", GitCommit:"eecf22f77df5f65c823aacd2dbd30ae6c65f186e", GitTreeState:"clean"}
Repro
I get the same error with or without template files under templates
, with or without running helmInitClient helmPackage
first.
Gradle 6
If the plugin is configured to use a kubeconfig file that references an external program (like one used for AWS authentication), it fails, because the PATH environmental variable is not forwarded to the Worker API
Example kubeconfig using the external aws-iam-authenticator
program to validate for AWS
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <some aws authority>
server: <some aws server>
name: <some aws name>
contexts:
- context:
cluster: <some aws cluster>
user: <some aws user>
name: <some aws name>
current-context: <some aws context>
kind: Config
preferences: {}
users:
- name: <some aws user>
user:
exec:
apiVersion: client.authentication.k8s.io/v1alpha1
args:
- token
- -i
- platform-validation-pipeline-cluster-eks
command: aws-iam-authenticator
env: null
Error
Error: Kubernetes cluster unreachable: Get <aws cluser>: getting credentials: exec: exec: "aws-iam-authenticator": executable file not found in $PATH
With the current implementations, all helmInstallXToY
tasks get skipped if they don't belong to the active release target (-Phelm.release.target=...
). If the active release target is set to a name that doesn't actually exists in helm.releaseTargets
, then it causes an error.
It would be better if the active release target is only used for determining the task dependencies of the generic helmInstall
and helmUninstall
tasks. The user should still be allowed to do something like ./gradlew helmInstallToLocal helmInstallToTest
if they wish, without the active release target getting in the way.
My release name has a hyphen in it so I tried to override it in the DSL:
helm {
releases {
myRelease {
from charts.myRelease
releaseName = "my-release"
}
}
}
This results in the above error about the name being read only. Can I set the release name without having to define a whole new task deriving from HelmInstall? I would like to use the tasks that the plugin kindly generates for me.
Can you please extend the documentation in the Wiki page? There is no documentation for the publishing/release tasks.
we came across your plugin and its an excellent plugin to work with i might say it solved a lot of repetitive tasks and automates the entire process. with that being said we understand the plugin is fairly new and we are trying to incorporate in in our project we ran into a coupe of issue we need help with.
plugins {
id 'war'
id 'java'
id 'idea'
id 'groovy'
id 'eclipse'
id 'org.unbroken-dome.helm' version '0.4.0'
id 'org.unbroken-dome.helm-publish' version '0.4.0'
id 'org.unbroken-dome.helm-releases' version '0.4.0'
id 'org.unbroken-dome.helm-commands' version '0.4.0'
}
helm {
home = file("${project.buildDir}/helm/home")
filtering {
// This value will be resolvable in all charts' YAML files as "${springProfile}"
values.put 'springProfile', 'prod'
}
charts {
web {
chartName = "${project.name}"
chartVersion = "${project.version}"
sourceDir = file('src/main/charts/web')
}
}
repositories {
company {
url = uri('https://chartmuseum.example.com/')
credentials {
username = 'USERNAME'
password = 'PASSWORD'
}
}
}
publishing {
repositories {
chartMuseum('company') {
url = uri('https://chartmuseum.example.com/')
credentials {
username = 'USERNAME'
password = 'PASSWORD'
}
}
}
}
releases {
web {
// from "company/${project.name}"
// version = "${project.version}"
from "charts/${project.name}"
}
}
}
we currently are running the repo in a private network which can be access via vpn, and we use SSL
Error: Looks like "https://chartmuseum.example.com/" is not a valid chart repository or cannot be reached: Get https://chartmuseum.example.com/index.yaml: dial tcp 10.10.3.210:443: connect: operation timed out
when testing to see if i'm able to push charts to the repo or pull we use the following command
`
helm repo add company https://chartmuseum.example.com --username USERNAME --password 'PASSWORD'
`
and everything works perfect so i know their isn't any issues with the actual repo running in a private network and ssl
would you be able to guide me on what seems to be the issue at hand thanks in advance
Most tools respect this variable, but this plugin does not.
I can work around it by setting it myself, but it seems like this should happen by default.
helm {
System.getenv("KUBECONFIG")?.let { kubeConfig.set(file(it)) }
}
When trying to add a repository configured like this:
helm {
repositories {
example {
url = new URI('some/url')
credentials {
username = "username"
password = "password"
}
}
}
}
Using the rule helmAddExampleRepository
fails with following stack trace:
> Task :helmAddExampleRepository
FAILURE: Build failed with an exception.
* What went wrong:
java.lang.StackOverflowError (no error message)
* Try:
Run with --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
java.lang.StackOverflowError
at org.gradle.api.internal.provider.DefaultPropertyState.getOrNull(DefaultPropertyState.java:138)
at org.gradle.api.internal.provider.DefaultPropertyState.getOrNull(DefaultPropertyState.java:139)
at org.gradle.api.internal.provider.DefaultPropertyState.getOrNull(DefaultPropertyState.java:139)
at org.gradle.api.internal.provider.DefaultPropertyState.getOrNull(DefaultPropertyState.java:139)
at org.gradle.api.internal.provider.DefaultPropertyState.getOrNull(DefaultPropertyState.java:139)
at org.gradle.api.internal.provider.DefaultPropertyState.getOrNull(DefaultPropertyState.java:139)
at org.gradle.api.internal.provider.DefaultPropertyState.getOrNull(DefaultPropertyState.java:139)
at org.gradle.api.internal.provider.DefaultPropertyState.getOrNull(DefaultPropertyState.java:139)
at org.gradle.api.internal.provider.DefaultPropertyState.getOrNull(DefaultPropertyState.java:139)
at org.gradle.api.internal.provider.DefaultPropertyState.getOrNull(DefaultPropertyState.java:139)
at org.gradle.api.internal.provider.DefaultPropertyState.getOrNull(DefaultPropertyState.java:139)
at org.gradle.api.internal.provider.DefaultPropertyState.getOrNull(DefaultPropertyState.java:139)
at org.gradle.api.internal.provider.DefaultPropertyState.getOrNull(DefaultPropertyState.java:139)
at org.gradle.api.internal.provider.DefaultPropertyState.getOrNull(DefaultPropertyState.java:139)
Environment:
gradle --version
------------------------------------------------------------
Gradle 5.2.1
------------------------------------------------------------
Build time: 2019-02-08 19:00:10 UTC
Revision: f02764e074c32ee8851a4e1877dd1fea8ffb7183
Kotlin DSL: 1.1.3
Kotlin: 1.3.20
Groovy: 2.5.4
Ant: Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM: 11.0.2 (Oracle Corporation 11.0.2+9-LTS)
OS: Windows 10 10.0 amd64
The plugin should have an option to automatically download the helm executable, instead of pointing to a local installation of helm.
This would make builds more portable as they don't have to expect a local helm installation to be present.
This piece of code makes the assumption that the startMark pointer will always be 0. However, that is not always the case (see below). In some cases the offset/pointer will be non-zero which causes a StringIndexOutOfBounds when parsing.
Caused by: java.lang.StringIndexOutOfBoundsException: offset 1027, count 1031, length 1031
at org.unbrokendome.gradle.plugins.helm.util.YamlTransformingReaderKt.readFromBuffer(YamlTransformingReader.kt:228)
at org.unbrokendome.gradle.plugins.helm.util.YamlTransformingReaderKt.access$readFromBuffer(YamlTransformingReader.kt:1)
at org.unbrokendome.gradle.plugins.helm.util.AbstractYamlTransformingReader$ValueState.handleValueEvent(YamlTransformingReader.kt:108)
at org.unbrokendome.gradle.plugins.helm.util.AbstractYamlTransformingReader$MappingValueState.handleEvent(YamlTransformingReader.kt:202)
at org.unbrokendome.gradle.plugins.helm.util.AbstractYamlTransformingReader$delegate$2.invoke(YamlTransformingReader.kt:82)
The referenced piece of code should be changed from:
// Start with the codepoints from startMark's buffer
// Note that if startMark.pointer is non-zero this causes an out-of-bounds exception
// Contructor is: String(buffer, offset into buffer, length from offset)
val startPart = String(startMark.buffer, startMark.pointer, startMark.buffer.size)
val codePointsLeft = length - (startMark.buffer.size - startMark.pointer)
To something like:
// Start with the codepoints from startMark's buffer
val bufferPresentInStartMark = startMark.buffer.size - startMark.pointer
val startPart = String(startMark.buffer, startMark.pointer, bufferPresentInStartMark)
val codePointsLeft = length - bufferPresentInStartMark
Which fixes the above error by not trying to parse past the end of the buffer.
Not sure what I am doing wrong but basically I just want to lint a chart.
Getting this error for some odd reason
* What went wrong:
A problem was found with the configuration of task 'my-tool:helmLintMy-toolChart'.
> Directory '/Users/*****/.helm
' specified for property '$1' does not exist.
I just ran
./gradlew helmLintMy-toolChart
Am trying to do step by step
lint , package, deploy
I'm getting the following error while trying to execute ./gradlew helmPackage
.
> Task :helmLintMainChart FAILED
cmd_run.go:918: WARNING: cannot create user data directory: failed to verify SELinux context of /home/tons/snap: exec: "matchpathcon": executable file not found in $PATH
Error: 1 chart(s) linted, 1 chart(s) failed
==> Linting /home/tons/IdeaProjects/whoami-mn/build/helm/charts/whoami
[ERROR] Chart.yaml: version should be of type string but it's of type float64
[INFO] Chart.yaml: icon is recommended
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':helmLintMainChart'.
> A failure occurred while executing org.unbrokendome.gradle.plugins.helm.command.HelmExecWorkAction
> Process 'command 'helm'' finished with non-zero exit value 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 2s
4 actionable tasks: 1 executed, 3 up-to-date
The command helm package src/main/helm/
works just fine though.
Any clue what's going wrong? Please let me know if I should post parts of my chart or setup
I am trying to publish the main chart to multiple artifactory repositories, but the task
helmPublishChartToRepo fails.
StackTrace
stacktrace.txt
My helm publish extension:
helm {
publishing {
repositories {
artifactory('myRepo') {
url = uri('https://artifactory.intra.company.com/artifactory/helm-dev/testHelm')
credentials {
username = project.properties.get("artifactory.username")
password = project.properties.get("artifactory.password")
}
}
}
}
}
When I run the helmPublish task everything works as expected, but when I run gradle helmPublishMainChartToMyRepoRepo
it fails.
With helm 3.2.0 version, it is now possible to create namespace by specifying --create-namespace
flag in helm install
or upgrade --install
command.
Are there any plans to add this flag support?
Maybe possibility to add custom args when releasing (like helm.extraArgs
property) would be enough?
When importing the plugin in a Gradle 5.x project (both 5.0 and 5.1) it throws: java.lang.NoClassDefFoundError: org/unbrokendome/gradle/plugins/helm/util/FixedValueProvider
I rolled my project back to 4.10.x and it is able to configure the plugin. Full stack trace:
An exception occurred applying plugin request [id: 'org.unbroken-dome.helm', version: '0.2.3']
at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugin(DefaultPluginRequestApplicator.java:232)
at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugins(DefaultPluginRequestApplicator.java:148)
at org.gradle.kotlin.dsl.provider.PluginRequestsHandler.handle(PluginRequestsHandler.kt:49)
at org.gradle.kotlin.dsl.provider.StandardKotlinScriptEvaluator$InterpreterHost.applyPluginsTo(KotlinScriptEvaluator.kt:190)
at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost.applyPluginsTo(Interpreter.kt:362)
at Program.execute(Unknown Source)
at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost.eval(Interpreter.kt:504)
at org.gradle.kotlin.dsl.execution.Interpreter.eval(Interpreter.kt:182)
at org.gradle.kotlin.dsl.provider.StandardKotlinScriptEvaluator.evaluate(KotlinScriptEvaluator.kt:114)
at org.gradle.kotlin.dsl.provider.KotlinScriptPluginFactory$create$1.invoke(KotlinScriptPluginFactory.kt:51)
at org.gradle.kotlin.dsl.provider.KotlinScriptPluginFactory$create$1.invoke(KotlinScriptPluginFactory.kt:36)
at org.gradle.kotlin.dsl.provider.KotlinScriptPlugin.apply(KotlinScriptPlugin.kt:34)
at org.gradle.configuration.BuildOperationScriptPlugin$1$1.run(BuildOperationScriptPlugin.java:69)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:66)
at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:63)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:48)
at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:63)
at org.gradle.configuration.project.BuildScriptProcessor$1.run(BuildScriptProcessor.java:44)
at org.gradle.internal.Factories$1.create(Factories.java:25)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:200)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:186)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:41)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject$1.run(LifecycleProjectEvaluator.java:106)
... 102 more
Caused by: org.gradle.api.plugins.InvalidPluginException: An exception occurred applying plugin request [id: 'org.unbroken-dome.helm', version: '0.2.3']
at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.exceptionOccurred(DefaultPluginRequestApplicator.java:247)
at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugin(DefaultPluginRequestApplicator.java:229)
... 131 more
Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin [class 'org.unbrokendome.gradle.plugins.helm.command.HelmCommandsPlugin']
at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:163)
at org.gradle.api.internal.plugins.DefaultPluginManager.addImperativePlugin(DefaultPluginManager.java:88)
at org.gradle.api.internal.plugins.DefaultPluginManager.addImperativePlugin(DefaultPluginManager.java:94)
at org.gradle.api.internal.plugins.DefaultPluginContainer.apply(DefaultPluginContainer.java:92)
at org.unbrokendome.gradle.plugins.helm.HelmPlugin.apply(HelmPlugin.kt:60)
at org.unbrokendome.gradle.plugins.helm.HelmPlugin.apply(HelmPlugin.kt:48)
at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:42)
at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:50)
at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:177)
at org.gradle.api.internal.plugins.DefaultPluginManager.access$300(DefaultPluginManager.java:51)
at org.gradle.api.internal.plugins.DefaultPluginManager$AddPluginBuildOperation.run(DefaultPluginManager.java:267)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:155)
at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:152)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:48)
at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:152)
at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:133)
at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator$3.run(DefaultPluginRequestApplicator.java:151)
at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugin(DefaultPluginRequestApplicator.java:225)
... 131 more
Caused by: org.gradle.api.reflect.ObjectInstantiationException: Could not create an instance of type org.unbrokendome.gradle.plugins.helm.dsl.DefaultHelmExtension.
at org.gradle.api.internal.DependencyInjectingInstantiator.newInstance(DependencyInjectingInstantiator.java:72)
at org.gradle.api.internal.model.DefaultObjectFactory.newInstance(DefaultObjectFactory.java:72)
at org.unbrokendome.gradle.plugins.helm.dsl.HelmExtensionKt.createHelmExtension(HelmExtension.kt:143)
at org.unbrokendome.gradle.plugins.helm.command.HelmCommandsPlugin.apply(HelmCommandsPlugin.kt:21)
at org.unbrokendome.gradle.plugins.helm.command.HelmCommandsPlugin.apply(HelmCommandsPlugin.kt:16)
at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:42)
at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:50)
at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:177)
at org.gradle.api.internal.plugins.DefaultPluginManager.access$300(DefaultPluginManager.java:51)
at org.gradle.api.internal.plugins.DefaultPluginManager$AddPluginBuildOperation.run(DefaultPluginManager.java:267)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:155)
at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:152)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:48)
at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:152)
... 153 more
Caused by: java.lang.NoClassDefFoundError: org/unbrokendome/gradle/plugins/helm/util/FixedValueProvider
at org.unbrokendome.gradle.plugins.helm.dsl.DefaultHelmExtension.<init>(HelmExtension.kt:145)
at org.unbrokendome.gradle.plugins.helm.dsl.DefaultHelmExtension_Decorated.<init>(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.gradle.api.internal.DependencyInjectingInstantiator.newInstance(DependencyInjectingInstantiator.java:63)
... 171 more
Question: I can't seem to create a HelmTest task
Could not create task of type 'HelmTest'.
> Class org.unbrokendome.gradle.plugins.helm.command.tasks.HelmTest is final.
Is there a way to create a HelmTest task?
Thanks
This plugin doesn't merge correctly external chart with custom override values.
This is Chart.yaml I have:
apiVersion: v2
appVersion: "1.0"
description: A Helm chart for Airflow scheduler
name: msmt-airflow
version: 0.1.0
home: https://mylink
maintainers:
- name: Me
email: [email protected]
dependencies:
- name: airflow
version: "6.10.4"
repository: "https://kubernetes-charts.storage.googleapis.com/"
This is "helm" section in my build.gradle
helm {
def dbURL = "${dbType}://${dbUser}:${dbPassword}@${dbHost}:${dbPort}/${dbSchema}"
namespace = 'ns'
lint { strict = true }
downloadClient {
enabled.set(true)
version.set("3.3.0")
}
filtering {
values.put 'PG_URL',"${dbURL}"
values.put 'TO_INIT', "false"
values.put 'FERNET_KEY', "${fernetKey}"
}
charts {
mychart {
chartName = "${chart_name}"
chartVersion ="${chart_version}"
sourceDir = file("helm/${chart_name}")
}
}
releases {
def releaseName = "${deployEnv != 'prod' ? System.properties['user.name'] + '-' : ''}${project.name}-$deployEnv"
"${releaseName}" { from charts."${chart_name}" }
}
}
Result of running command ./gradlew :<myproject>:helmInstall
with this configuration is very different from running command helm3 install mychart stable/airflow --version 6.10.4 --namespace <ns> --values myproject/helm/mychart/values.yaml
- custom values from myproject/helm/mychart/values.yaml
are definitely not being applied.
I'm using plugin version 1.2.1 and Gradle version 6.6
Perhaps the http client built here:
https://github.com/unbroken-dome/gradle-helm-plugin/blob/master/src/main/kotlin/org/unbrokendome/gradle/plugins/helm/publishing/publishers/AbstractHttpHelmChartPublisher.kt#L88
needs a cookie spec as in this example:
https://stackoverflow.com/questions/36473478/fixing-httpclient-warning-invalid-expires-attribute-using-fluent-api
I am configuring the init task as:
task helmInit(type: HelmInit) {
dependsOn helmAddRepository
replicas = 1 // Amount of Tiller instances to run on the cluster.
skipRefresh = false
upgrade = true
wait = true
debug = true
}
but in gradle's output I can see that the --wait
flag is not being passed:
Executing: [helm, init, --debug, --replicas, 1]
Workaround:
I think I can use extraArgs
for now and pass --wait
directly to helm.
I'm configuring helm-publish as follows:
helm {
publishing {
repositories {
artifactory {
url = uri('https://artifactory.example.com/my-helm-repo')
credentials {
username = 'user'
password = 'pass'
}
}
}
}
}
Instead of the plugin writing the Basic Auth header as:
Authorization: Basic <base64-string>
it writes
Authorization: Basic Basic <base64-string>
I think this is of prefixing the response of okhttp3 that also contains "Basic" literal with another "Basic" literal:
Hi,
I checked out your plugin, is it possible to execute "helm upgrade" or "helm install" or can I really only publish, manage and build charts?
Helm lint tasks fail exceptionally in a fresh project with the following error message: Transformer for this provider returned a null value
Digging through the source it looks like the following snippet is the culprit.
Specifically options.fileValues.map<String> {
resolves to AbstractMinimalProvider.map
at runtime and not the kotlin stdlib map.
Turns out that the lambda used for mapping is not allowed to return null which can occur at m.takeIf { it.isNotEmpty() }
Currently we can specify values and value files to pass to the linter, but it would be useful if we could lint a chart in different configurations to cover different control flows.
Most charts contain render some K8s resources conditionally based on the configuration of values. Mostly, with the default values given in values.yaml, a lot of templates are not rendered by default, so that errors in these templates will not be caught by the linter.
Charts should allow multiple "configurations" for the linter, where each of them has a different set of values to pass to the linter. The linting step should then run all of them.
I configured releases section (plugin version 1.1.1, Gradle 6.3, Java 14, Kotlin 1.3.71)
releases {
create("lcp-oauth") {
from("lcp/lcp-oauth")
version.set("1.0.2")
dryRun.set(true)
}
}
I run ./gradlew helmInstall --info
and see in the log
Starting process 'command 'helm''. Working directory: /Users/user/Work/lcp/lcp-oauth Command: helm ls -o json -f ^\Qlcp-oauth\E$
Successfully started process 'command 'helm''
Release "{}" has previously failed. Using 'helm install --replace' to install it.
Executing: [helm, install, --dry-run, lcp-oauth, lcp/lcp-oauth, --replace]
Starting process 'command 'helm''. Working directory: /Users/user/Work/lcp/lcp-oauth Command: helm install --dry-run lcp-oauth lcp/lcp-oauth --replace
Successfully started process 'command 'helm''
helm installed the latest version of the chart from the repo and ignore the version, you can see in the log that the --install option was not formed
I'm trying to split project build and only build helm charts when required.
It seems to be easy to build helm charts separately using helmPackage/helmPublish tasks.
But I didn't find easy way to disable helm tasks / build everything but helm charts.
Any advice?
I'm having numerous problems upgrading my build scripts from 0.3.0 version of this plugin, to the current one, everything is broken. Is there any complete working example of using it anywhere? Or forum, or any other help resources where I could ask my questions? Anything?
I am trying to enable client downloading as per docs:
// build.gradle
helm {
downloadClient {
enabled = true
version = '3.2.0'
}
}
However, this is what I get on Gradle 6.6:
Caused by: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'true' with class 'java.lang.Boolean' to class 'org.gradle.api.provider.Property'
However, Kotlin syntax works:
helm {
downloadClient {
enabled.set(true)
version.set("3.2.0")
}
}
It is strange because it seems other closures don't have this problem:
helm {
downloadClient {
enabled.set(true)
version.set("3.2.0")
}
// works as expected
lint {
strict = true
}
}
Hi there,
Actually I face the problem that the task ':helmLintMainChart'. fails all the time.
I think it is a bug inside your gradle task definition. Or am I wrong here?
Im using version 0.2.1
See stack trace below
Task :helmLintMainChart FAILED
FAILURE: Build failed with an exception.
No value has been specified for this provider.
Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Exception is:
org.gradle.api.GradleException: Could not evaluate onlyIf predicate for task ':helmLintMainChart'.
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:44)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.IllegalStateException: No value has been specified for this provider.
at org.gradle.api.internal.provider.AbstractProvider.get(AbstractProvider.java:31)
at org.gradle.api.internal.provider.AbstractMappingProvider.get(AbstractMappingProvider.java:45)
at org.gradle.api.internal.provider.DefaultPropertyState.get(DefaultPropertyState.java:90)
at org.gradle.api.internal.provider.DefaultPropertyState.get(DefaultPropertyState.java:90)
at org.unbrokendome.gradle.plugins.helm.rules.LintTaskRule$apply$2$1$1$1.isSatisfiedBy(LintTaskRule.kt:43)
at org.unbrokendome.gradle.plugins.helm.rules.LintTaskRule$apply$2$1$1$1.isSatisfiedBy(LintTaskRule.kt:13)
at org.gradle.api.specs.AndSpec.isSatisfiedBy(AndSpec.java:47)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:42)
... 20 more
My values file contains regular expression similar to this:
prefix: /v1/tenants/\w*/(users|roles).*
When I run taks gradle helmPackage
i get following error:
> Failed to parse template script (your template may contain an error or be trying to use expressions not currently supported): startup failed:
SimpleTemplateScript38.groovy: 11: unexpected char: '\' @ line 11, column 23.
prefix: /v1/tenants/\w*/(users|roles).*
^
The only way to fix this is to remove regexp value. Sometimes you want to set some defaults tho and then it's a problem.
Here is another example of value which is causing problem:
^([a-z0-9]+)(\-[a-z0-9]+)?\.api\.eu\.tenant\-service\.commerce\.cloud\.foo\.com$
Result:
> Failed to parse template script (your template may contain an error or be trying to use expressions not currently supported): startup failed:
SimpleTemplateScript36.groovy: 9: unexpected char: '\' @ line 9, column 23.
host: '^([a-z0-9]+)(\-[a-z0-9]+)?\.api\.eu\.tenant\-service\.commerce\.cloud\.foo\.com$'
^
Greetings!
When I exec my task uploadArchives(need to upload other dependencies), plugin also exec task helmPackageChartChart. It's create build/helm/charts/chart_name_folder.
Then, I get the error:
* What went wrong:
Execution failed for task ':uploadArchives'.
> Could not publish configuration 'archives'
> Cannot publish a directory (build/helm/charts/chart_name_folder)
Any ideas how to fix this?
For now it fails with an error: Error: unknown flag: --client-only
running tasks that do a helmExec internally e.g helmAddMyRepository -i
produces the following output:
> Task :helmAddMyRepository Caching disabled for task ':helmAddMyRepository' because: Build cache is disabled Task ':helmAddMyRepository' is not up-to-date because: Task.upToDateWhen is false. Executing: [helm, repo, add, --username, myUser, --password, ******, my, https://localhost/artifactory/helm3] Starting process 'command 'helm''. Working directory: C:\myChart Command: helm repo add --username myUser --password myPassword my https://localhost/artifactory/helm3
The helmExec should be masked as well. Currently passwords are printed in cleartext
Helm publish task fails with error: org.apache.http.client.HttpResponseException: Method Not Allowed
Pls see some details from the log:
Executing request POST /artifactory/helm/api/charts HTTP/1.1
.....
Execution failed for task ':helmPublishMainChartToHelmArtifactoryRepo'.
[org.gradle.internal.buildevents.BuildExceptionReporter] > org.apache.http.client.HttpResponseException: Method Not Allowed
Not all helm repos are http(s) based, a good example is the s3 helm plugin. It would be nice to have a publishing plugin that uses the the helm
command to publish to leverage helm repository plugins.
The following warning is produced:
The ProjectLayout.configurableFiles() method has been deprecated. This is scheduled to be removed in Gradle 6.0. Please use the ObjectFactory.fileCollection() method instead.
at org.gradle.api.internal.file.DefaultProjectLayout.configurableFiles(DefaultProjectLayout.java:114)
at org.unbrokendome.gradle.plugins.helm.dsl.DefaultLinting.<init>(Linting.kt:63)
at org.unbrokendome.gradle.plugins.helm.dsl.DefaultLinting_Decorated.<init>(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.gradle.internal.instantiation.AsmBackedClassGenerator.newInstance(AsmBackedClassGenerator.java:179)
at org.gradle.internal.instantiation.AbstractClassGenerator$GeneratedClassImpl$GeneratedConstructorImpl.newInstance(AbstractClassGenerator.java:395)
at org.gradle.internal.instantiation.DependencyInjectingInstantiator.newInstance(DependencyInjectingInstantiator.java:49)
at org.gradle.api.internal.model.DefaultObjectFactory.newInstance(DefaultObjectFactory.java:82)
at org.unbrokendome.gradle.plugins.helm.dsl.LintingKt.createLinting(Linting.kt:82)
at org.unbrokendome.gradle.plugins.helm.dsl.LintingKt.createLinting$default(Linting.kt:81)
at org.unbrokendome.gradle.plugins.helm.command.HelmCommandsPlugin.apply(HelmCommandsPlugin.kt:24)
at org.unbrokendome.gradle.plugins.helm.command.HelmCommandsPlugin.apply(HelmCommandsPlugin.kt:15)
at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:43)
at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:51)
at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:181)
at org.gradle.api.internal.plugins.DefaultPluginManager.access$300(DefaultPluginManager.java:51)
at org.gradle.api.internal.plugins.DefaultPluginManager$AddPluginBuildOperation.run(DefaultPluginManager.java:276)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:159)
at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:156)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:49)
at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:156)
at org.gradle.api.internal.plugins.DefaultPluginManager.addImperativePlugin(DefaultPluginManager.java:88)
at org.gradle.api.internal.plugins.DefaultPluginManager.addImperativePlugin(DefaultPluginManager.java:95)
at org.gradle.api.internal.plugins.DefaultPluginContainer.apply(DefaultPluginContainer.java:94)
at org.unbrokendome.gradle.plugins.helm.HelmPlugin.apply(HelmPlugin.kt:34)
at org.unbrokendome.gradle.plugins.helm.HelmPlugin.apply(HelmPlugin.kt:22)
at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:43)
at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:51)
at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:181)
at org.gradle.api.internal.plugins.DefaultPluginManager.access$300(DefaultPluginManager.java:51)
at org.gradle.api.internal.plugins.DefaultPluginManager$AddPluginBuildOperation.run(DefaultPluginManager.java:276)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:159)
at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:156)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:49)
at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:156)
at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:136)
at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator$3.run(DefaultPluginRequestApplicator.java:155)
at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugin(DefaultPluginRequestApplicator.java:231)
at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugins(DefaultPluginRequestApplicator.java:151)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:206)
at org.gradle.configuration.BuildOperationScriptPlugin$1$1.run(BuildOperationScriptPlugin.java:69)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:66)
at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:63)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:49)
at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:63)
at org.gradle.configuration.project.BuildScriptProcessor$1.run(BuildScriptProcessor.java:45)
at org.gradle.internal.Factories$1.create(Factories.java:26)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:201)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:187)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:42)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:35)
at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject$1.run(LifecycleProjectEvaluator.java:107)
at org.gradle.internal.Factories$1.create(Factories.java:26)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:189)
at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:227)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:221)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:187)
at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:96)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:68)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:693)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:141)
at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:36)
at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:62)
at org.gradle.configuration.DefaultProjectsPreparer.prepareProjects(DefaultProjectsPreparer.java:55)
at org.gradle.configuration.BuildOperatingFiringProjectsPreparer$ConfigureBuild.run(BuildOperatingFiringProjectsPreparer.java:52)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.configuration.BuildOperatingFiringProjectsPreparer.prepareProjects(BuildOperatingFiringProjectsPreparer.java:40)
at org.gradle.initialization.DefaultGradleLauncher.prepareProjects(DefaultGradleLauncher.java:198)
at org.gradle.initialization.DefaultGradleLauncher.doClassicBuildStages(DefaultGradleLauncher.java:138)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:126)
at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:106)
at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:60)
at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:57)
at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:85)
at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:78)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:189)
at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:78)
at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:57)
at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:54)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:63)
at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:51)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:45)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:50)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47)
at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:78)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42)
at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:52)
at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:59)
at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:36)
at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68)
at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37)
at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:68)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:27)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
at java.lang.Thread.run(Thread.java:748)```
It would be great if helm-releases
plugin would have possibility to check release status.
Task helmStatus<X>
could be added, which checks status of release named X by calling helm status
.
The plugin states to be compatible with Gradle 5.2, which is currently not the case because we're using Provider.orElse()
which was only added in 5.6.
Need to backport this to construct a new Provider
with a fixed default value or a default value provider.
@tkrullmann
After I set helm.lint.enabled=false , there is also another problem.
I'm using the laest version 0.2.2
Task :helmPackageMainChart FAILED
FAILURE: Build failed with an exception.
What went wrong:
Execution failed for task ':helmPackageMainChart'.
No value has been specified for this provider.
Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':helmPackageMainChart'.
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:49)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$ExecuteTaskAction.execute(DefaultTaskExecutionGraph.java:262)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$ExecuteTaskAction.execute(DefaultTaskExecutionGraph.java:246)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:136)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.execute(DefaultTaskPlanExecutor.java:201)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.executeWithTask(DefaultTaskPlanExecutor.java:192)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.IllegalStateException: No value has been specified for this provider.
at org.gradle.api.internal.provider.AbstractProvider.get(AbstractProvider.java:30)
at org.gradle.api.internal.provider.DefaultPropertyState.get(DefaultPropertyState.java:90)
at org.gradle.api.internal.provider.DefaultPropertyState.get(DefaultPropertyState.java:90)
at org.gradle.util.DeferredUtil.unpack(DeferredUtil.java:39)
at org.gradle.api.internal.tasks.StaticValue.validate(StaticValue.java:37)
at org.gradle.api.internal.tasks.DefaultPropertySpecFactory$FileTreeValue.validate(DefaultPropertySpecFactory.java:92)
at org.gradle.api.internal.tasks.DefaultTaskInputFilePropertySpec.validate(DefaultTaskInputFilePropertySpec.java:124)
at org.gradle.api.internal.tasks.execution.DefaultTaskProperties.validate(DefaultTaskProperties.java:193)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:47)
... 25 more
Get more help at https://help.gradle.org
Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
See https://docs.gradle.org/4.8.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD FAILED in 11s
7 actionable tasks: 1 executed, 6 up-to-date
Hello! I am trying to use this plugin with a Java 1.8 project, and when I attempt to run the helmPublish
task, I get this exception:
java.lang.NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer
Apparently this is caused by a change introduced in Java 9. I found a thread from another project that dealt with this issue (see here) and it seems that they were able to resolve it by building their published artifact with JDK 1.8.
I verified that I am able to successfully run this task when I try running it with OpenJDK 9.
Here is the full stack trace:
> Task :helmCollectMainChartDependencies UP-TO-DATE
> Task :helmFilterMainChartSources UP-TO-DATE
> Task :helmCollectMainChartSources UP-TO-DATE
> Task :helmAddRepositories UP-TO-DATE
> Task :helmUpdateRepositories SKIPPED
> Task :helmUpdateMainChartDependencies SKIPPED
> Task :helmLintMainChart SKIPPED
> Task :helmPackageMainChart UP-TO-DATE
> Task :helmPublishMainChartToDefaultRepo FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':helmPublishMainChartToDefaultRepo'.
> java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer;
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':helmPublishMainChartToDefaultRepo'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:166)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:163)
at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:191)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:156)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:108)
at org.gradle.api.internal.tasks.execution.ResolveBeforeExecutionOutputsTaskExecuter.execute(ResolveBeforeExecutionOutputsTaskExecuter.java:67)
at org.gradle.api.internal.tasks.execution.StartSnapshotTaskInputsBuildOperationTaskExecuter.execute(StartSnapshotTaskInputsBuildOperationTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.ResolveAfterPreviousExecutionStateTaskExecuter.execute(ResolveAfterPreviousExecutionStateTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:94)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: java.lang.NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer;
at org.unbrokendome.gradle.plugins.helm.util.DigestUtilsKt.calculateDigest(DigestUtils.kt:33)
at org.unbrokendome.gradle.plugins.helm.util.DigestUtilsKt.calculateDigest(DigestUtils.kt:62)
at org.unbrokendome.gradle.plugins.helm.util.DigestUtilsKt.calculateDigestHex(DigestUtils.kt:79)
at org.unbrokendome.gradle.plugins.helm.util.DigestUtilsKt.calculateDigestHex$default(DigestUtils.kt:77)
at org.unbrokendome.gradle.plugins.helm.publishing.dsl.DefaultArtifactoryHelmPublishingRepository$Publisher.additionalHeaders(ArtifactoryHelmPublishingRepository.kt:40)
at org.unbrokendome.gradle.plugins.helm.publishing.publishers.AbstractHttpHelmChartPublisher.publish(AbstractHttpHelmChartPublisher.kt:76)
at org.unbrokendome.gradle.plugins.helm.publishing.tasks.HelmPublishChart.publish(HelmPublishChart.kt:66)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:103)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:49)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:42)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:717)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:684)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$5.run(ExecuteActionsTaskExecuter.java:476)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:461)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:444)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:93)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:237)
at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$1(ExecuteStep.java:33)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:33)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:58)
at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:35)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:33)
at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:39)
at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
at org.gradle.internal.execution.steps.CatchExceptionStep.execute(CatchExceptionStep.java:35)
at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:45)
at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:31)
at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:208)
at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:70)
at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:45)
at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:49)
at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:43)
at org.gradle.internal.execution.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:32)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:96)
at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:89)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:54)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:76)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:90)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:48)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:69)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:47)
at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:140)
... 35 more
Updated version to 0.4.4 and when running gradle command to publish chart to ChartMuseum throws following error
org.apache.http.client.HttpResponseException: Not Found
build.gradle set up
plugins {
id 'war'
id 'java'
id 'idea'
id 'groovy'
id 'eclipse'
id 'com.patdouble.awsecr' version '0.5.2'
id 'org.unbroken-dome.helm' version '0.4.4'
id 'org.springframework.boot' version '2.1.7.RELEASE'
id 'com.bmuschko.docker-remote-api' version '5.2.0'
id 'com.bmuschko.docker-spring-boot-application' version '5.2.0'
id 'org.unbroken-dome.helm-publish' version '0.4.4'
id 'org.unbroken-dome.helm-releases' version '0.4.4'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
}
helm {
home = file("${project.buildDir}/helm/home")
filtering {
// This value will be resolvable in all charts' YAML files as "${springProfile}"
values.put 'springProfile', 'prod'
values.put 'internalPort', '8000'
}
charts {
service {
chartName = "${project.name}"
chartVersion = "${version}"
sourceDir = file('src/main/charts/service')
}
}
repositories {
company {
url = uri('https://charts.company.com')
credentials {
username = 'USERNAME'
password = 'PASSWORD'
}
}
}
publishing {
repositories {
company {
url = uri('https://charts.company.com')
credentials {
username = 'USERNAME'
password = 'PASSWORD'
}
}
}
}
releases {
service {
from chart("${project.name}")
version = "${version}"
namespace = "NAMESPACE"
}
}
}
Error Message
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':service:helmPublishServiceChartToCompanyRepo'.
> org.apache.http.client.HttpResponseException: Not Found
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.5.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD FAILED in 1s
7 actionable tasks: 1 executed, 6 up-to-date
6:46:36 PM: Task execution finished 'helmPublish'.
we followed exactly what the docs says and its failing every single time can you please guide us as to what might the issue
I checked out your plugin and using it in one of my application. I am trying to deploy helm chart on remote kubernetes cluster using your plugin. I have implemented following gradle tasks.
helm {
kubeConfig = file('src/main/resources/helm/kubeconfig')
}
task installApp(type: HelmInstallOrUpgrade) {
version = "1.1.0"
releaseName = "appRelease"
values = [ 'imageRepository': 'dockerRepo/dockerImage', 'imageTag' : "1.1.0"]
chart = 'src/main/resources/helm/charDir'
}
But getting error Transformer for this provider returned a null value
While executing command gradle installApp
.
Is error getting due to plugin or my mistake? Can you provide me right direction?
Gradle internally is trying to cast a java.io.File into a String when using a x.509 certificate.
Gradle appears to be assuming that all managed immutable values are Strings which, probably, is a bug but an easy work-around for this case is to change java.io.File to a String since they're being passed to helm anyways as Strings. When using them in a build script you're first defining them as files which handles the 'existence' case and should be safe.
The only place they're not is on publishing but that doesn't encounter the issue since the CertificateCredentials object is serializable and it isn't encountering the issue.
Exception is:
> Unable to store input properties for task ':helmAdd<REPO>Repository'. Property 'keyFile' with value '<path/to/keyfile.pem>' cannot be serialized.
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':helmAdd<REPO>Repository'.
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:38)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:372)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:359)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:352)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:338)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: org.gradle.api.UncheckedIOException: Unable to store input properties for task ':helmAdd<REPO>Repository'. Property 'keyFile' with value '<path/to/keyfile.pem>' cannot be serialized.
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.lambda$fingerprintInputProperties$2(CaptureStateBeforeExecutionStep.java:178)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.visitInputProperties(ExecuteActionsTaskExecuter.java:307)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.fingerprintInputProperties(CaptureStateBeforeExecutionStep.java:169)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.captureExecutionState(CaptureStateBeforeExecutionStep.java:149)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.lambda$captureExecutionStateOp$1(CaptureStateBeforeExecutionStep.java:104)
at org.gradle.internal.execution.steps.BuildOperationStep$1.call(BuildOperationStep.java:40)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.internal.execution.steps.BuildOperationStep.operation(BuildOperationStep.java:37)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.captureExecutionStateOp(CaptureStateBeforeExecutionStep.java:103)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.lambda$execute$0(CaptureStateBeforeExecutionStep.java:78)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:78)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:53)
at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:78)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:78)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:39)
at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:40)
at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:28)
at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:192)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:184)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:114)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
... 23 more
Caused by: java.lang.ClassCastException: class java.io.File cannot be cast to class java.lang.String (java.io.File and java.lang.String are in module java.base of loader 'bootstrap')
at org.gradle.internal.snapshot.impl.DefaultValueSnapshotter$ValueSnapshotVisitor.managedImmutableValue(DefaultValueSnapshotter.java:287)
at org.gradle.internal.snapshot.impl.DefaultValueSnapshotter$ValueSnapshotVisitor.managedImmutableValue(DefaultValueSnapshotter.java:228)
at org.gradle.internal.snapshot.impl.DefaultValueSnapshotter.processValue(DefaultValueSnapshotter.java:152)
at org.gradle.internal.snapshot.impl.DefaultValueSnapshotter.snapshot(DefaultValueSnapshotter.java:54)
at org.gradle.internal.snapshot.impl.NullValueSnapshot.snapshot(NullValueSnapshot.java:37)
at org.gradle.internal.snapshot.impl.DefaultValueSnapshotter.snapshot(DefaultValueSnapshotter.java:59)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.lambda$fingerprintInputProperties$2(CaptureStateBeforeExecutionStep.java:175)
... 56 more
Which if you dig into the gradle code you see:
@Override
public ValueSnapshot managedImmutableValue(Managed managed) {
return new ImmutableManagedValueSnapshot(managed.publicType().getName(), (String) managed.unpackState());
}
Note the raw string cast without checking for type (esp. if you trace up the stack trace) and compare to line 292 below it which doesn't make the same assumption. The assumption is done because ImmutableManagedValue only takes Strings.
Some Helm tasks could make better use of parallel builds when defined in the same project, by injecting the WorkerExecutor
service into the task.
Some obvious candidates are HelmPublishChart
and HelmInstall
etc. which could take a long time but are likely independent from each other if there are multiple charts / releases defined in the same project, so they could run in parallel.
HelmPublish
, worker API could also provide classloader isolation for the necessary HTTP client library, so we don't need to have a strong dependency on the HTTP client if publishing is not usedExecOperations
into the worker action which finally allows calling exec
in a worker action. Pre 6.0 we need to continue using non-parallelizable calls to Project.exec
.Our artifactory instance implements write-once semantics for final chart versions and will throw an error if you try to publish the same version again. Sometimes we need to re-run a pipeline to resolve an error that came after the chart publication leaving us unable to get past the publication that worked first time.
Currently we work around with an ugly bit of curl in an onlyIf
attached to the publish task. It would be great if this logic was encapsulated in the DSL.
Sometimes it is useful to skip dependency update task if requirements.yaml contains dependencies to only local subcharts. Due to the following helm issue it is not possible right now: helm/helm#3742
It would be nice if you could disable dependency update for a specific chart. Here is an example:
helm {
charts {
foo {
chartName = 'foo'
chartVersion = '1.2.3'
sourceDir = file('src/helm')
skipDependencyUpdate = true
}
}
}
Here is my build.gradle.kts:
plugins {
id("org.unbroken-dome.helm") version "0.4.0"
id("org.unbroken-dome.helm-publish") version "0.4.0"
}
helm {
home.set(file("$buildDir/helm/home"))
publishing {
repositories {
artifactory("my-repo") {
url.set(uri("http://my-repo/helm-dev"))
}
}
}
charts {
create("myChart") {
chartName.set("my-chart")
sourceDir.set(file("$projectDir/src/my-chart"))
publish = false
}
}
}
Trying to run helmPublish task fails with an error:
Script compilation error:
Line 21: publish = false
^ Unresolved reference: publish
Replacing with publish.set(false)
does not help either.
It seems that the value helm.charts.main.chartVersion
is not read or used by the helmPackage
tasks. It only reads the version from Chart.yaml
.
Perhaps because helm package
is called without --version
here: https://github.com/unbroken-dome/gradle-helm-plugin/blob/master/src/main/kotlin/org/unbrokendome/gradle/plugins/helm/command/tasks/HelmPackage.kt#L142
In my setup, it means that helmPackage
creates a tgz
with the version from Chart.yaml
, but helmPublish
then looks for an archive with the version specified by project.version
.
Using plugin version 0.4.0.
The timeoutSeconds property accepts integer.
Eg: timeoutSeconds = 1000
Eventually, this property will convert into --timeout flag for the actual command.
Eg: helm xxxxxxxxxxxxxxxxxxxxxxxx --timeout 1000
The actual --timeout flag excepts an integer with time unit(s or m), So we are encountering an error.
Eg: --timeout 1000s
or --timeout 1000m
Error: invalid argument "1000" for "--timeout" flag: time: missing unit in duration 1000
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.