# This script downloads the latest version of JFrog CLI, unless a specific version is requested. # By default, JFrog CLI is downloaded from releases.jfrog.io. # The script also supports downloading JFrog CLI from an Artifactory remote repository, by setting the following environment variables: # 1. JF_RELEASES_REPO - name of the generic remote repository, pointing to "https://releases.jfrog.io/artifactory/" # 2. JF_URL - URL of the JFrog Platform that includes the remote repository. # 3. Credentials to the JFrog Platform: # a. JF_ACCESS_TOKEN # OR # b. JF_USER & JF_PASSWORD .download_jf: &download_jf # Install the latest JFrog CLI version, unless JFROG_CLI_VERSION is provided. - | if [ -n "${JFROG_CLI_VERSION}" ]; then VERSION="${JFROG_CLI_VERSION}" echo "Downloading version $VERSION of JFrog CLI..." else VERSION="[RELEASE]" echo "Downloading the latest version of JFrog CLI..." fi # Download from remote repository if required. - | if [ -z "${JF_RELEASES_REPO}" ] then BASE_URL="https://releases.jfrog.io/artifactory" AUTH_HEADER="" echo "Downloading directly from releases.jfrog.io..." else # Make sure URL does not contain duplicate separators. BASE_URL="${JF_URL%/}/artifactory/${JF_RELEASES_REPO%/}" if [ -n "${JF_ACCESS_TOKEN}" ]; then AUTH_HEADER="Authorization: Bearer ${JF_ACCESS_TOKEN}" else AUTH_HEADER="Authorization: Basic $(printf ${JF_USER}:${JF_PASSWORD} | base64)" fi echo "Downloading from remote repository '${JF_RELEASES_REPO}'..." fi echo "" # Build the URL to the executable matching the OS. - | if $(echo "${OSTYPE}" | grep -q darwin); then CLI_OS="mac" if [[ $(uname -m) == 'arm64' ]]; then URL="${BASE_URL}/jfrog-cli/v2-jf/${VERSION}/jfrog-cli-mac-arm64/jf" else URL="${BASE_URL}/jfrog-cli/v2-jf/${VERSION}/jfrog-cli-mac-386/jf" fi FILE_NAME="jf" else CLI_OS="linux" MACHINE_TYPE="$(uname -m)" case $MACHINE_TYPE in i386 | i486 | i586 | i686 | i786 | x86) ARCH="386" ;; amd64 | x86_64 | x64) ARCH="amd64" ;; arm | armv7l) ARCH="arm" ;; aarch64) ARCH="arm64" ;; s390x) ARCH="s390x" ;; ppc64) ARCH="ppc64" ;; ppc64le) ARCH="ppc64le" ;; *) echo "Unknown machine type: $MACHINE_TYPE" exit -1 ;; esac URL="${BASE_URL}/jfrog-cli/v2-jf/${VERSION}/jfrog-cli-${CLI_OS}-${ARCH}/jf" FILE_NAME="jf" fi # Download with curl and verify exit code and status code. - status_code=$(curl -XGET "$URL" -L -k -g -w "%{http_code}" -f -O -H "${AUTH_HEADER}") - exit_code=$? - | if [ $exit_code -ne 0 ]; then echo "Error: Failed downloading JFrog CLI" exit $exit_code fi - | if [ $status_code != "200" ]; then echo "Error: Received unexpected HTTP status code: $status_code" exit 1 fi - chmod u+x $FILE_NAME .set_jfrog_bin: &set_jfrog_bin - JFROG_BIN="$HOME/.jfrog/bin/" - PATH="$JFROG_BIN:$PATH" .setup_jfrog: script: - PLUGIN_VERSION="2.0.0" # Assert JF_URL is provided. - | if [ -z "${JF_URL}" ]; then echo "The 'JF_URL' variable is mandatory." exit 1 fi # Configure JFrog bin directory to download JFrog CLI to. - *set_jfrog_bin - mkdir -p $JFROG_BIN - chmod +x $JFROG_BIN # Download JFrog CLI and move to the bin directory. - *download_jf - mv ./jf "$JFROG_BIN/" # Verify CLI was downloaded. - | if [ ! -f $(which jf) ]; then echo "JFrog CLI Installation failed." exit 1 fi # Create server ID. - CONFIG_CMD="jf c add setup-jfrog-gitlab-ci-server-${CI_JOB_ID} --overwrite --url ${JF_URL}" - | if [ -n "${JF_ACCESS_TOKEN}" ]; then CONFIG_CMD="${CONFIG_CMD} --access-token=${JF_ACCESS_TOKEN}" elif [ -n "${JF_USER}" ] && [ -n "${JF_PASSWORD}" ]; then CONFIG_CMD="${CONFIG_CMD} --user=${JF_USER} --password=${JF_PASSWORD}" fi - "${CONFIG_CMD}" # Export general environment variables: - export JFROG_CLI_USER_AGENT="setup-jfrog-for-gitlab-unix/${PLUGIN_VERSION}" - export CI=${CI:=true} - export JFROG_CLI_BUILD_NAME=$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_NAME - export JFROG_CLI_BUILD_NUMBER=$CI_PIPELINE_ID - export JFROG_CLI_BUILD_URL=$CI_PIPELINE_URL - export JFROG_CLI_ENV_EXCLUDE=${JFROG_CLI_ENV_EXCLUDE:='*password*;*secret*;*key*;*token*;*auth*;JF_URL;JF_USER;JF_PASSWORD;JF_ACCESS_TOKEN'} # Override registry variables if JF_DOCKER_REGISTRY was set: - | if [ -n "${JF_DOCKER_REGISTRY}" ]; then export CI_REGISTRY=$JF_DOCKER_REGISTRY export CI_REGISTRY_IMAGE="$JF_DOCKER_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME" export CI_REGISTRY_USER=$JF_USER export CI_REGISTRY_PASSWORD=${JF_ACCESS_TOKEN:=$JF_PASSWORD} fi .cleanup_jfrog: script: - *set_jfrog_bin - jf c rm setup-jfrog-gitlab-ci-server-${CI_JOB_ID} --quiet