Giter Site home page Giter Site logo

consul-kv-builder-plugin's Introduction

Consul-KV-Builder

Jenkins plugin to read/write/delete K/V pairs from/to Consul K/V store.

To build with tests, you must supply the HOST constant in the org.jenkinsci.plugins.consulkv.ConsulKVBuilderTest class.

You may also need to supply the ACL_ID is the Consul is secured with an ACL.

consul-kv-builder-plugin's People

Contributors

anoppe avatar jimmyraywv avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

consul-kv-builder-plugin's Issues

How to WRITE to consul in Pipeline?

Regarding to documentation

This plugin can be used in Jenkins Pipeline scripts with "wrap" and "step" constructs:

If I use code from example

node {
    step([$class: 'ConsulKVReadWrapper', key: 'test/test-key', keyValue: '2', requestMode: 'WRITE', debugMode: 'ENABLED'])
  
}

I got output:

[Pipeline] {
[Pipeline] step
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
java.lang.UnsupportedOperationException: no known implementation of interface jenkins.tasks.SimpleBuildStep is named ConsulKVReadWrapper
	at org.jenkinsci.plugins.structs.describable.DescribableModel.resolveClass(DescribableModel.java:449)
	at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:401)
	at org.jenkinsci.plugins.structs.describable.DescribableModel.buildArguments(DescribableModel.java:340)
	at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:281)
	at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:208)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:153)
	at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)
	at sun.reflect.GeneratedMethodAccessor339.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:157)
	at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:133)
	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:159)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:129)
	at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
Caused: java.lang.IllegalArgumentException: Could not instantiate {delegate={$class=ConsulKVReadWrapper, key=test/test-key, keyValue=2, requestMode=WRITE, debugMode=ENABLED}} for CoreStep(delegate: SimpleBuildStep{ArtifactArchiver(artifacts: String, allowEmptyArchive?: boolean, caseSensitive?: boolean, defaultExcludes?: boolean, excludes?: String, fingerprint?: boolean, onlyIfSuccessful?: boolean) | CoberturaPublisher(autoUpdateHealth?: boolean, autoUpdateStability?: boolean, classCoverageTargets?: String, coberturaReportFile?: String, conditionalCoverageTargets?: String, failNoReports?: boolean, failUnhealthy?: boolean, failUnstable?: boolean, fileCoverageTargets?: String, lineCoverageTargets?: String, maxNumberOfBuilds?: int, methodCoverageTargets?: String, onlyStable?: boolean, packageCoverageTargets?: String, sourceEncoding?: SourceEncoding[ASCII, Big5, Big5_HKSCS, Big5_Solaris, Cp037, Cp1006, Cp1025, Cp1026, Cp1046, Cp1047, Cp1097, Cp1098, Cp1112, Cp1122, Cp1123, Cp1124, Cp1140, Cp1141, Cp1142, Cp1143, Cp1144, Cp1145, Cp1146, Cp1147, Cp1148, Cp1149, Cp1250, Cp1251, Cp1252, Cp1253, Cp1254, Cp1255, Cp1256, Cp1257, Cp1258, Cp1381, Cp1383, Cp273, Cp277, Cp278, Cp280, Cp284, Cp285, Cp297, Cp33722, Cp420, Cp424, Cp437, Cp500, Cp737, Cp775, Cp838, Cp850, Cp852, Cp855, Cp856, Cp857, Cp858, Cp860, Cp861, Cp862, Cp863, Cp864, Cp865, Cp866, Cp868, Cp869, Cp870, Cp871, Cp874, Cp875, Cp918, Cp921, Cp922, Cp930, Cp933, Cp935, Cp937, Cp939, Cp942, Cp942C, Cp943, Cp943C, Cp948, Cp949, Cp949C, Cp950, Cp964, Cp970, EUC_CN, EUC_JP, EUC_JP_LINUX, EUC_JP_Solaris, EUC_KR, EUC_TW, GB18030, GBK, ISCII91, ISO2022_CN_CNS, ISO2022_CN_GB, ISO2022CN, ISO2022JP, ISO2022KR, ISO8859_1, ISO8859_13, ISO8859_15, ISO8859_2, ISO8859_3, ISO8859_4, ISO8859_5, ISO8859_6, ISO8859_7, ISO8859_8, ISO8859_9, JISAutoDetect, KOI8_R, MacArabic, MacCentralEurope, MacCroatian, MacCyrillic, MacDingbat, MacGreek, MacHebrew, MacIceland, MacRoman, MacRomania, MacSymbol, MacThai, MacTurkish, MacUkraine, MS874, MS932, MS936, MS949, MS950, MS950_HKSCS, PCK, SJIS, TIS620, UnicodeBig, UnicodeBigUnmarked, UnicodeLittle, UnicodeLittleUnmarked, UTF_16, UTF_8, x_iso_8859_11, x_Johab], zoomCoverageChart?: boolean) | ConsulKVBuilder(hostUrl: String, key: String, aclToken?: String, apiUri?: String, debugMode?: DebugMode[ENABLED, DISABLED], envVarKey?: String, ignoreGlobalSettings?: boolean, keyValue?: String, requestMode?: RequestMode[READ, WRITE, DELETE], timeoutConnection?: int, timeoutResponse?: int) | CucumberReportPublisher(fileIncludePattern: String, buildStatus?: String, classifications?: Classification(key: String, value: String)[], classificationsFilePattern?: String, failedFeaturesNumber?: int, failedScenariosNumber?: int, failedStepsNumber?: int, fileExcludePattern?: String, jsonReportDirectory?: String, parallelTesting?: boolean, pendingStepsNumber?: int, skippedStepsNumber?: int, sortingMethod?: String, trendsLimit?: int, undefinedStepsNumber?: int) | Fingerprinter(targets: String) | IssueFieldUpdateStep(issueSelector?: AbstractIssueSelector{DefaultIssueSelector() | ExplicitIssueSelector(issueKeys: String) | JqlIssueSelector(jql: String) | P4JobIssueSelector() | PerforceJobIssueSelector()}, fieldId?: String, fieldValue?: String) | JUnitResultArchiver(testResults: String, allowEmptyResults?: boolean, healthScaleFactor?: double, keepLongStdio?: boolean, testDataPublishers?: TestDataPublisher{}[]) | JavadocArchiver(javadocDir: String, keepAll: boolean) | JiraIssueUpdateBuilder(jqlSearch: String, workflowActionName: String, comment: String) | JiraIssueUpdater(issueSelector: AbstractIssueSelector{DefaultIssueSelector() | ExplicitIssueSelector(issueKeys: String) | JqlIssueSelector(jql: String) | P4JobIssueSelector() | PerforceJobIssueSelector()}, scm: SCM{GitSCM(userRemoteConfigs: UserRemoteConfig(url: String, name: String, refspec: String, credentialsId: String)[], branches: BranchSpec(name: String)[], doGenerateSubmoduleConfigurations: boolean, submoduleCfg: org.kohsuke.stapler.NoStaplerConstructorException: There's no @DataBoundConstructor on any constructor of class hudson.plugins.git.SubmoduleConfig[], browser: GitRepositoryBrowser{AssemblaWeb(repoUrl: String) | BitbucketWeb(repoUrl: String) | CGit(repoUrl: String) | FisheyeGitRepositoryBrowser(repoUrl: String) | GitBlitRepositoryBrowser(repoUrl: String, projectName: String) | GitLab(repoUrl: String, version: String) | GitList(repoUrl: String) | GitWeb(repoUrl: String) | GithubWeb(repoUrl: String) | Gitiles(repoUrl: String) | GitoriousWeb(repoUrl: String) | GogsGit(repoUrl: String) | KilnGit(repoUrl: String) | Phabricator(repoUrl: String, repo: String) | RedmineWeb(repoUrl: String) | RhodeCode(repoUrl: String) | Stash(repoUrl: String) | TFS2013GitRepositoryBrowser(repoUrl: String) | ViewGitWeb(repoUrl: String, projectName: String)}, gitTool: String, extensions: GitSCMExtension{AuthorInChangelog() | BuildChooserSetting(buildChooser: BuildChooser{AncestryBuildChooser(maximumAgeInDays: int, ancestorCommitSha1: String) | DefaultBuildChooser() | InverseBuildChooser()}) | ChangelogToBranch(options: ChangelogToBranchOptions(compareRemote: String, compareTarget: String)) | CheckoutOption(timeout: int) | CleanBeforeCheckout() | CleanCheckout() | CloneOption(shallow: boolean, noTags: boolean, reference: String, timeout: int, depth?: int, honorRefspec?: boolean) | DisableRemotePoll() | GitLFSPull() | IgnoreNotifyCommit() | LocalBranch(localBranch: String) | MessageExclusion(excludedMessage: String) | PathRestriction(includedRegions: String, excludedRegions: String) | PerBuildTag() | PreBuildMerge(options: UserMergeOptions(mergeTarget: String, fastForwardMode?: GitPluginFastForwardMode[FF, FF_ONLY, NO_FF], mergeRemote?: String, mergeStrategy?: Strategy[DEFAULT, RESOLVE, RECURSIVE, OCTOPUS, OURS, SUBTREE, RECURSIVE_THEIRS])) | PruneStaleBranch() | RelativeTargetDirectory(relativeTargetDir: String) | ScmName(name: String) | SparseCheckoutPaths(sparseCheckoutPaths: SparseCheckoutPath(path: String)[]) | SubmoduleOption(disableSubmodules: boolean, recursiveSubmodules: boolean, trackingSubmodules: boolean, reference: String, timeout: int, parentCredentials: boolean) | UserExclusion(excludedUsers: String) | UserIdentity(name: String, email: String) | WipeWorkspace()}[]) | MercurialSCM(source: String, browser?: HgBrowser{BitBucket(url: String) | FishEye(url: String) | GoogleCode(url: String) | HgWeb(url: String) | Kallithea(url: String) | KilnHG(url: String) | RhodeCode(url: String) | RhodeCodeLegacy(url: String)}, clean?: boolean, credentialsId?: String, disableChangeLog?: boolean, installation?: String, modules?: String, revision?: String, revisionType?: RevisionType[BRANCH, TAG, CHANGESET, REVSET], subdir?: String) | MultiSCM(scmList: SCM?[]) | NullSCM() | ProxySCM(projectName: String) | SubversionSCM(locations: ModuleLocation(remote: String, credentialsId: String, local: String, depthOption: String, ignoreExternalsOption: boolean, cancelProcessOnExternalsFail: boolean)[], workspaceUpdater: WorkspaceUpdater{CheckoutUpdater() | NoopUpdater() | UpdateUpdater() | UpdateWithCleanUpdater() | UpdateWithRevertUpdater()}, browser: SubversionRepositoryBrowser{Assembla(spaceName: String) | CollabNetSVN(url: String) | FishEyeSVN(url: String, rootModule: String) | Phabricator(url: String, repo: String) | SVNWeb(url: String) | Sventon(url: String, repositoryInstance: String) | Sventon2(url: String, repositoryInstance: String) | ViewSVN(url: String) | VisualSVN(url: String) | WebSVN(url: String)}, excludedRegions: String, excludedUsers: String, excludedRevprop: String, excludedCommitMessages: String, includedRegions: String, ignoreDirPropChanges: boolean, filterChangelog: boolean, additionalCredentials: AdditionalCredentials(realm: String, credentialsId: String)[], quietOperation: boolean)}, labels: String[]) | JiraReleaseVersionUpdaterBuilder(jiraProjectKey: String, jiraRelease: String) | JiraVersionCreatorBuilder(jiraVersion: String, jiraProjectKey: String) | Mailer(recipients: String, notifyEveryUnstableBuild: boolean, sendToIndividuals: boolean) | WsCleanup(cleanWhenAborted?: boolean, cleanWhenFailure?: boolean, cleanWhenNotBuilt?: boolean, cleanWhenSuccess?: boolean, cleanWhenUnstable?: boolean, cleanupMatrixParent?: boolean, deleteDirs?: boolean, externalDelete?: String, notFailBuild?: boolean, patterns?: Pattern(pattern: String, type: PatternType[INCLUDE, EXCLUDE])[], skipWhenFailed?(deprecated): boolean)})
	at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:286)
	at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:208)
	at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:153)
	at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)
	at sun.reflect.GeneratedMethodAccessor339.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:157)
	at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:133)
	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:159)
	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:129)
	at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
	at WorkflowScript.run(WorkflowScript:10)
	at ___cps.transform___(Native Method)
	at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)
	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
	at sun.reflect.GeneratedMethodAccessor337.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
	at com.cloudbees.groovy.cps.impl.CollectionLiteralBlock$ContinuationImpl.dispatch(CollectionLiteralBlock.java:55)
	at com.cloudbees.groovy.cps.impl.CollectionLiteralBlock$ContinuationImpl.item(CollectionLiteralBlock.java:45)
	at sun.reflect.GeneratedMethodAccessor334.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
	at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
	at com.cloudbees.groovy.cps.Next.step(Next.java:83)
	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)
	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)
	at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:122)
	at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:261)
	at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$101(SandboxContinuable.java:34)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.lambda$run0$0(SandboxContinuable.java:59)
	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:58)
	at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:332)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$200(CpsThreadGroup.java:83)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:244)
	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:232)
	at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:131)
	at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
	at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

If I delete 'step'

node {
    [$class: 'ConsulKVReadWrapper', key: 'test/test-key', keyValue: '2', requestMode: 'WRITE', debugMode: 'ENABLED']
}

Outputs:

[Pipeline] {
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline

And key in consul was unchanged

Expose global settings

Need to expose following variables in global settings:
host
apiUrl
aclToken
connectionTimeout
responseTimeout

helptext/defaults

Please make the "help" text more helpful, i.e. specify port 8500.

Also, can the default Test URI field be filled in by default?

Optional override Consul RESTful HTTP API URI doesn't seem to working

I cannot get get the local code override to work. It returns the value from the server specified globally.

Here is the code

node { wrap([$class: 'ConsulKVReadWrapper', reads: [[aclToken: 'tokenstuff', urlOverride: 'http://consul.url:8500', apiUri: 'http://consul.url:8500', debugMode: 'ENABLED', envKey: 'a_active_key', hostUrl: 'http://consul.url:8500', key: "ecs/aside/active"]]]) { echo env.a_active_key } }

Not sure what I am missing. I am using jenkins 2.70.

Thanks!

NPE Using Jenkins Pipeline on a build agent

Works on the Jenkins master, but on a build slave NPEs on ConsulKVReadWrapper:105

Fails:

node ('agent') {
    wrap([$class: 'ConsulKVReadWrapper', reads: [
        [key: 'some/path', envKey: 'VALUE'],
        ]
    ]) {
        echo env.VALUE
    }
}

Works:

node ('master') {
    wrap([$class: 'ConsulKVReadWrapper', reads: [
        [key: 'some/path', envKey: 'VALUE'],
        ]
    ]) {
        echo env.VALUE
    }
}

Tested with Jenkins: 2.113

aclToken is not taken from Pipeline call

Hello,
i think use/set token in pipeline call is not working as expected.
I don't want to set in Jenkins global configuration the ACLToken for Consul.
Then I tried to set the Token via pipeline wrapper call itself.
But the token is not taken from the pipeline call it throws a 403 and in the output the url don't have the part ?token=my-nice-token

this is my call
`node {
stage('wraper'){
script{
TEST_KEY = ''

wrap([
    $class: 'ConsulKVReadWrapper',
    reads: [[
    hostUrl: 'http://myconsul:8500',
    aclToken: 'my-nice-token',
    apiUri: '',
    debugMode: 'ENABLED',
    envKey: 'test_key',
    key: 'path/path/path/test'
    ]]
    ]) {
    echo env.test_key
    TEST_KEY = env.test_key
}

echo TEST_KEY
    }
}

}`

and output is this:
[Pipeline] wrap Consul READ URL: http://myconsul:8500/v1/kv/path/path/path/test<here is something missing> Response Headers: Content-Type=text/plain; charset=utf-8 Vary=Accept-Encoding Date=Fri, 13 Sep 2019 07:06:45 GMT org.apache.http.client.ClientProtocolException: Unexpected response status: 403

Jenkins pipeline step not writing to env

Within my pipeline i want to get some Data from a consul. For that I try to get them with this plugin. From Log output I can see that the value is correct but it isn't written to a environment.

When I try to do that without pipeline it works fine.

Here's the code, maybe i did sth. wrong?

node ('consul') {
    stage('Get service node') {

        step([
            $class: 'ConsulKVBuilder', 
            debugMode: 'ENABLED', 
            requestMode: 'READ', 
            envVarKey: 'SERVICE_HOST', 
            keyValue: '', 
            key: 'service/'+params.SERVICE_NAME])

        print env.SERVICE_HOST

    }
}

And here the Logoutput from Jenkins:

Started by user user
[Pipeline] node
Running on <NODE> in /home/jenkins/workspace/Docker-Consul-Deployments/with-pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Get service node)
[Pipeline] step
Consul READ URL:  http://<CONSUL_URL>:8500/v1/kv/service/lala
Response Headers: 
Content-Type=application/json
X-Consul-Index=10370
X-Consul-Knownleader=true
X-Consul-Lastcontact=0
Date=Fri, 28 Oct 2016 13:18:23 GMT
Content-Length=111
Consul K/V pair:  service/lala=fooooooo
Stored ENV variable (k,v):  SERVICE_HOST=null
Raw content:  [{"LockIndex":0,"Key":"service/lala","Flags":0,"Value":"Zm9vb29vb28=","CreateIndex":10370,"ModifyIndex":10370}]
[Pipeline] echo
null
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.