Skip to content

Latest commit

History

122 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Docker StarsDocker pullsDocker build statusDocker Automated build

dockeri.co

Concourse CI Key Value Resource

Implements a resource that passes key values between jobs without using any external resource such as git/s3 etc.

Thanks

This resource was implemented based on the time resource

Source Configuration

resource_types:
- name: keyvaltype: docker-imagesource:
repository: swce/keyval-resourceresources:
- name: keyvaltype: keyval

Parameters

None.

Behavior

check: Produce a single dummy key

This is a version-less resource so check behavior is no-op

in: Report the given time.

Fetches the given key values and stores them in the keyval.properties file. The format is of a .properties file, e.g. "<key>=<value>".

Parameters

None.

out: Consumes the given properties file

- put: keyvalparams:
file: keyvalout/keyval.properties

Reads the given properties file and sets them for the next job.

Parameters

  • file - the properties file to read the key values from

Examples

resource_types:
- name: keyvaltype: docker-imagesource:
repository: swce/keyval-resourceresources:
- name: keyvaltype: keyvaljobs:
- name: buildplan:
- task: buildfile: tools/tasks/build/task.yml
- put: keyvalparams:
file: keyvalout/keyval.properties
- name: test-deployplan:
- aggregate:
- get: keyvalpassed:
- build
- task: test-deployfile: tools/tasks/task.yml

The build job writes all the key values it needs to pass along (e.g. artifact id) in the keyvalout/keyval.properties file. The test-deploy can read the data from the keyval/keyval.properties file and use them as it pleases.

CI suggestions

Auto export the keys

You can add the following bash script to the start of every job to auto export the passed key values, if they exist. The script assumes that the resource folder is keyval.

  • Don't forget to source the script so it's exports will be passed along
#!/bin/bash
props="${ROOT_FOLDER}/keyval/keyval.properties"if [ -f"$props" ]
thenecho"Reading passed key values"while IFS= read -r var
doif [ !-z"$var" ]
thenecho"Adding: $var"export"$var"fidone<"$props"fi

Auto pass the keys

You can add the following bash script to the end of every job to auto pass specific environment variables as key values to the next job. The script only passes environment variables that start with PASSED_. The script assumes that the resource out file is keyvalout/keyval.properties:

e.g.

- put: keyvalparams:
file: keyvalout/keyval.properties
#!/bin/bash
propsDir="${ROOT_FOLDER}/keyvalout"
propsFile="${propsDir}/keyval.properties"if [ -d"$propsDir" ]
then
touch "$propsFile"echo"Setting key values for next job in ${propsFile}"while IFS='='read -r name value ;doif [[ $name=='PASSED_'* ]];thenecho"Adding: ${name}=${value}"echo"${name}=${value}">>"$propsFile"fidone<<(env)fi

Development

Prerequisites

  • golang is required - version 1.9.x is tested; earlier versions may also work.
  • docker is required - version 17.06.x is tested; earlier versions may also work.
  • godep is used for dependency management of the golang packages.

Running the tests

The tests have been embedded with the Dockerfile; ensuring that the testing environment is consistent across any docker enabled platform. When the docker image builds, the test are run inside the docker container, on failure they will stop the build.

Run the tests with the following command:

docker build -t keyval-resource .

Contributing

Please make all pull requests to the master branch and ensure tests pass locally.

About

a resource that passes key values between jobs

Topics

Resources

Stars

39 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages