Deploys and retrieves artifacts from a JFrog Artifactory server for a Concourse pipeline.
To define an Artifactory resource for a Concourse pipeline:
resource_types:
- name: artifactory
type: docker-image
source:
repository: pivotalservices/artifactory-resource
resources:
- name: file-repository
type: artifactory
source:
endpoint: http://ARTIFACTORY-HOST-NAME-GOES-HERE:8081/artifactory
repository: "/repository-name/sub-folder"
regex: "myapp-(?<version>.*).txt"
username: YOUR-ARTIFACTORY-USERNAME
password: YOUR-ARTIFACTORY-PASSWORD
skip_ssl_verification: true
endpoint
: Required. The Artifactory REST API endpoint. eg. http://YOUR-HOST_NAME:8081/artifactory.repository
: Required. The Artifactory repository which includes any folder path, must contain a leading '/'.eg. /generic/product/pcf
regex
: Required. Regular expression used to extract artifact version, must contain 'version' group and match the entire filename.E.g. myapp-(?<version>.*).tar.gz
username
: Optional. Username for HTTP(S) auth when accessing an authenticated repositorypassword
: Optional. Password for HTTP(S) auth when accessing an authenticated repositoryskip_ssl_verification
: Optional. Skip ssl verification when connecting to Artifactory's APIs. Values:true
orfalse
(default).
file
: Required for put The file to upload to Artifactoryregex
: Optional overrides the source regexfolder
: Optional. appended to the repository in source - must start with forward slash /skip_download
: Optional. skip download of file. Useful for improving put performance by skipping the implicit get step using get_params.
Saving/deploying an artifact to Artifactory in a pipeline job:
jobs:
- name: build-and-save-to-artifactory
plan:
- task: build-a-file
config:
platform: linux
image_resource:
type: docker-image
source:
repository: ubuntu
outputs:
- name: build
run:
path: sh
args:
- -exc
- |
export DATESTRING=$(date +"%Y%m%d")
echo "This is my file" > ./build/myapp-$(date +"%Y%m%d%H%S").txt
find .
- put: file-repository
params: { file: ./build/myapp-*.txt }
Retrieving an artifact from Artifactory in a pipeline job:
jobs:
- name: trigger-when-new-file-is-added-to-artifactory
plan:
- get: file-repository
trigger: true
- task: use-new-file
config:
platform: linux
image_resource:
type: docker-image
source:
repository: ubuntu
inputs:
- name: file-repository
run:
path: echo
args:
- "Use file(s) from ./file-repository here..."
See pipeline.yml for an example of a full pipeline definition file.
Relies on the regex to retrieve artifact versions
Same as check, but retrieves the artifact based on the provided version
Deploys the artifact.
file
: Required. The path to the artifact to deploy.
Run the following command in the root folder:
$ docker build -t username/artifactory-resource .
The test suite consists of a mixture of unit and integration tests.
The unit test suite requires bats to be installed.
For example, to execute the unit tests for common.sh
functions:
$ bats test/common.bats
In order to run the integration tests, you must be running Artifactory on port 8081. The easiest way to do that is to run Artifactory in a Docker container:
$ docker run --name artifactory -d -p 8081:8081 docker.bintray.io/jfrog/artifactory-oss:latest
Then you need to run a script to seed it with test data:
TBD
To run the integration test suite (which is in the container image at /opt/resource-tests):
$ docker run -it \
--env ART_IP=127.0.0.1 \
--env ART_USER=admin \
--env ART_PWD=admin \
username/artifactory-resource:latest \
/opt/resource-tests/test-check.sh
$ docker run -it \
--env ART_IP=127.0.0.1 \
--env ART_USER=admin \
--env ART_PWD=admin \
username/artifactory-resource:latest \
/opt/resource-tests/test-in.sh
$ docker run -it \
--env ART_IP=127.0.0.1 \
--env ART_USER=admin \
--env ART_PWD=admin \
username/artifactory-resource:latest \
/opt/resource-tests/test-out.sh
Or you can build Dockerfile.tests
to run all tests:
$ docker build -f Dockerfile.tests \
--build-arg ART_IP=127.0.0.1 \
--build-arg ART_USER=admin \
--build-arg ART_PWD=admin \
-t username/artifactory-resource:test .
This resource was originally based on the artifactory resource work of mborges.