Bulk-upload files to artifactory
I found myself needing to upload a large amount of RPM files to artifactory. I don't have maven installed, and am not too familiar with it, so I took a look at Artifactory's REST API documentation and put together a small shell script to do what I need:
#!/bin/sh
# Upload directory to artifactory
die() {
printf %s\\n "$*" >&2
exit ${rc:-1}
}
usage() {
prog=`basename "$0"`
rc=2 die "Usage: ${prog} [-s url] [-u user] [-p pass] srcdir dstdir"
}
askpass() {
read -rsp "$1: " pass
echo>/dev/tty
printf '%s' "$pass"
}
# Remove leading and trailing slashes
trim() {
printf %s "$1" | sed 's,^/\+,,;s,/\+$,,'
}
upload() {
src="$1"; shift
dst=`trim "$1"`; shift
status=`(cd "$src" && tar c .) | upload_tar "$url/$dst/.tar"`
case "$status" in
(200) return 0;;
(403) die "403 Forbidden" ;;
(401) die "401 Invalid credentials" ;;
(*) die "Error code ${status}";;
esac
}
upload_tar() {
dst="$1"; shift
auth="${user}:${pass}"
curl -o /dev/null -# -u "$auth" -X PUT -w '%{http_code}' \
-H 'X-Explode-Archive: true' \
--data-binary @/dev/stdin "$dst"
}
user="$USER"
url="https://artifactory.example.com"
while getopts :u:p:s: arg
do case "$arg" in
(u) user="$OPTARG" ;;
(p) pass="$OPTARG" ;;
(s) url=`trim "$OPTARG"` ;;
(*) usage ;;
esac; done
shift `expr $OPTIND - 1`; unset OPTIND
[ "$pass" ] || pass=`askpass "Artifactory password for ${user}"`
[ $# -eq 2 ] || usage
upload "$@"
I believe most of the REST API in artifactory is restricted in the free version. However, if you use Artifactory pro, this script might save you a bit of time.
- Related posts