Migrating from JFrog Artifactory

This comprehensive guide will help you migrate from JFrog Artifactory to CloudRepo. Most teams complete the entire migration process in under an hour, and the cost savings typically range from 80-97%.

Why Migrate to CloudRepo

Teams migrate from JFrog Artifactory to CloudRepo for several compelling reasons:

  • Cost Savings: Save 80-97% on total costs (base subscription + egress fees + support)

  • No Egress Fees: Unlimited data transfer included with all plans

  • Included Support: No separate 6-figure support contracts

  • Simplicity: Setup in 10 minutes vs 2-3 days with JFrog

  • Better Support: Direct access to engineers, not outsourced support teams

Real Cost Comparison Example

For a medium-sized team with 500GB storage and 4TB monthly transfer:

  • JFrog Artifactory: $150 base + $3,000 egress + $8,333 support = $11,483/month

  • CloudRepo: $299/month all-inclusive

  • Monthly Savings: $11,184 (97% reduction)

Pre-Migration Checklist

Before starting your migration, gather the following information:

  1. Repository Inventory

    • List all repositories in your JFrog instance

    • Note repository types (Maven, Python, etc.)

    • Document repository sizes

  2. User Access

    • List all users who need access

    • Document permission requirements

    • Note any service accounts for CI/CD

  3. Integration Points

    • Identify all CI/CD pipelines using JFrog

    • List all build tools and their configurations

    • Document any webhook integrations

  4. Credentials

    • JFrog admin credentials for export

    • Have CloudRepo signup information ready

Step-by-Step Migration

Step 1: Create Your CloudRepo Account

Start by signing up for CloudRepo if you haven’t already:

  1. Visit the CloudRepo Signup Page

  2. Start your 14-day free trial (no credit card required)

  3. Follow the Getting Started guide to access the admin portal

Step 2: Create Repositories in CloudRepo

For each repository in JFrog, create a corresponding repository in CloudRepo:

  1. Log into the CloudRepo Admin Portal

  2. Navigate to the Repositories section

  3. Create repositories matching your JFrog setup

Note

CloudRepo supports unlimited repositories on all plans, unlike JFrog’s tiered limitations.

Step 3: Export Artifacts from JFrog

You have several options for exporting artifacts:

Option A: Using JFrog REST API

# Export all artifacts from a repository
curl -u username:password \
  "https://yourcompany.jfrog.io/artifactory/api/storage/your-repo" \
  -o artifacts-list.json

# Download artifacts using the list
# You can script this based on the JSON response

Option B: Using JFrog CLI

# Configure JFrog CLI
jfrog config add artifactory-server \
  --artifactory-url=https://yourcompany.jfrog.io/artifactory \
  --user=username --password=password

# Download all artifacts from a repository
jfrog rt download "your-repo/*" ./backup/

Option C: Manual Download

For smaller repositories, you can manually download artifacts through the JFrog UI.

Step 4: Import Artifacts to CloudRepo

Once you have your artifacts exported, import them to CloudRepo:

Maven Repositories

For Maven artifacts, you can use the standard Maven deploy plugin:

# Deploy a single artifact
mvn deploy:deploy-file \
  -DgroupId=com.example \
  -DartifactId=my-artifact \
  -Dversion=1.0.0 \
  -Dpackaging=jar \
  -Dfile=my-artifact-1.0.0.jar \
  -DrepositoryId=cloudrepo \
  -Durl=https://[orgname].mycloudrepo.io/repositories/[repo-name]

For bulk uploads, create a script to iterate through your artifacts.

See Maven Repositories for detailed Maven configuration.

Python Repositories

For Python packages:

# Configure pip to use CloudRepo
pip config set global.index-url \
  https://[orgname].mycloudrepo.io/repositories/[repo-name]/simple

# Upload packages using twine
twine upload --repository-url \
  https://[orgname].mycloudrepo.io/repositories/[repo-name] \
  dist/*

See Python Repositories for detailed Python configuration.

Raw Repositories

For raw/binary artifacts:

# Upload using curl
curl -u username:password \
  -T myfile.zip \
  https://[orgname].mycloudrepo.io/repositories/[repo-name]/myfile.zip

See Raw HTTP Repositories for detailed Raw repository usage.

Step 5: Update Build Configurations

Update your build tool configurations to point to CloudRepo:

Maven settings.xml

Update your ~/.m2/settings.xml or project settings.xml:

<settings>
  <servers>
    <server>
      <id>cloudrepo</id>
      <username>your-username</username>
      <password>your-password</password>
    </server>
  </servers>

  <profiles>
    <profile>
      <id>cloudrepo</id>
      <repositories>
        <repository>
          <id>cloudrepo</id>
          <url>https://[orgname].mycloudrepo.io/repositories/[repo-name]</url>
        </repository>
      </repositories>
    </profile>
  </profiles>

  <activeProfiles>
    <activeProfile>cloudrepo</activeProfile>
  </activeProfiles>
</settings>

Gradle Configuration

Update your build.gradle:

repositories {
    maven {
        url "https://[orgname].mycloudrepo.io/repositories/[repo-name]"
        credentials {
            username = project.cloudrepoUsername
            password = project.cloudrepoPassword
        }
    }
}

Python pip Configuration

Update your pip configuration:

# Global configuration
pip config set global.index-url \
  https://username:password@[orgname].mycloudrepo.io/repositories/[repo-name]/simple

# Or in requirements.txt
--index-url https://username:password@[orgname].mycloudrepo.io/repositories/[repo-name]/simple

Step 6: Update CI/CD Pipelines

Update your continuous integration pipelines to use CloudRepo:

GitHub Actions

- name: Configure Maven
  run: |
    mkdir -p ~/.m2
    cat > ~/.m2/settings.xml << 'EOF'
    <settings>
      <servers>
        <server>
          <id>cloudrepo</id>
          <username>${{ secrets.CLOUDREPO_USERNAME }}</username>
          <password>${{ secrets.CLOUDREPO_PASSWORD }}</password>
        </server>
      </servers>
    </settings>
    EOF

- name: Deploy to CloudRepo
  run: mvn deploy

Jenkins Pipeline

pipeline {
    environment {
        CLOUDREPO_CREDS = credentials('cloudrepo-credentials')
    }
    stages {
        stage('Deploy') {
            steps {
                sh """
                    mvn deploy \
                      -DaltDeploymentRepository=cloudrepo::default::https://[orgname].mycloudrepo.io/repositories/[repo-name] \
                      -Dusername=$CLOUDREPO_CREDS_USR \
                      -Dpassword=$CLOUDREPO_CREDS_PSW
                """
            }
        }
    }
}

GitLab CI

deploy:
  stage: deploy
  script:
    - echo "<settings>...</settings>" > ~/.m2/settings.xml
    - mvn deploy
  variables:
    CLOUDREPO_USERNAME: $CI_CLOUDREPO_USERNAME
    CLOUDREPO_PASSWORD: $CI_CLOUDREPO_PASSWORD

See Continuous Integration and Deployment for more CI/CD examples.

Testing and Validation

After migration, verify everything is working correctly:

  1. Test Artifact Upload

    Deploy a test artifact to CloudRepo:

    mvn deploy:deploy-file \
      -DgroupId=com.test \
      -DartifactId=test-artifact \
      -Dversion=1.0.0-TEST \
      -Dpackaging=jar \
      -Dfile=test.jar \
      -DrepositoryId=cloudrepo \
      -Durl=https://[orgname].mycloudrepo.io/repositories/[repo-name]
    
  2. Test Artifact Download

    Verify dependencies resolve correctly:

    # Clear local cache
    rm -rf ~/.m2/repository/com/test/
    
    # Force download from CloudRepo
    mvn dependency:get \
      -DgroupId=com.test \
      -DartifactId=test-artifact \
      -Dversion=1.0.0-TEST
    
  3. Test CI/CD Pipeline

    • Run a test build in your CI/CD system

    • Verify artifacts are uploaded to CloudRepo

    • Check that downstream projects can resolve dependencies

  4. Verify Proxy Repositories

    If using proxy repositories, test that external dependencies resolve correctly. See Proxy Repositories for configuration details.

Post-Migration

After successful migration and testing:

  1. Update Documentation

    • Update team wikis with new repository URLs

    • Document CloudRepo credentials and access

    • Update onboarding guides for new developers

  2. Monitor Usage

    • Check the CloudRepo dashboard for usage patterns

    • Verify no unexpected errors in build logs

    • Monitor download speeds and performance

  3. Configure Webhooks (Optional)

    If you were using webhooks with JFrog, configure them in CloudRepo. See Webhooks for details.

  4. Decommission JFrog

    Once everything is verified:

    • Export a final backup of JFrog artifacts (just in case)

    • Cancel JFrog subscription and support contracts

    • Celebrate your cost savings! 🎉

Troubleshooting

Common Issues and Solutions

Authentication Failures

If you get 401 errors:

  • Verify username and password are correct

  • Check that the user has appropriate permissions in CloudRepo

  • Ensure credentials are properly escaped in URLs

Slow Upload/Download Speeds

  • CloudRepo typically provides faster speeds than JFrog due to no throttling

  • Check your internet connection

  • Contact support if speeds are unexpectedly slow

Missing Dependencies

  • Ensure all repositories are created in CloudRepo

  • Check that repository URLs are correctly updated

  • Verify proxy repositories are configured for external dependencies

CI/CD Pipeline Failures

  • Double-check environment variables and secrets

  • Verify repository URLs don’t have typos

  • Check that service accounts have correct permissions

Getting Help

CloudRepo support is included with all plans (unlike JFrog’s expensive support contracts):

  • Email: support@cloudrepo.io

  • Intercom Widget: Chat with Support Live (Located on Bottom Right of this page)

  • Response Time: Usually within 2 hours during business hours

  • Direct Access: Talk directly to engineers, not outsourced support

When contacting support, please provide:

  • Your organization name

  • Repository names involved

  • Error messages or logs

  • Steps to reproduce the issue

Migration Checklist

Use this checklist to track your migration progress:

☐ Create CloudRepo account
☐ Create repositories in CloudRepo
☐ Export artifacts from JFrog
☐ Import artifacts to CloudRepo
☐ Update Maven settings.xml
☐ Update Gradle configurations
☐ Update Python pip configurations
☐ Update CI/CD pipelines
☐ Test artifact upload
☐ Test artifact download
☐ Test CI/CD builds
☐ Update team documentation
☐ Configure webhooks (if needed)
☐ Monitor for 24-48 hours
☐ Decommission JFrog
☐ Cancel JFrog subscription

Estimated Time Savings

Based on customer experiences:

  • Small Team (1-10 developers): 30-45 minutes total

  • Medium Team (11-50 developers): 45-60 minutes total

  • Large Team (50+ developers): 1-2 hours total

Compare this to JFrog setup time of 2-3 days minimum!

Cost Savings

After migration, you’ll save:

  • No Egress Fees: Save $0.75-$1.25 per GB of downloads

  • No Support Contracts: Save $100,000+ annually

  • Lower Base Cost: Plans start at $79 vs JFrog’s $150+

Typical savings: 80-97% reduction in total costs

Note

Ready to start saving? Begin your migration today with our 14-day free trial. Visit CloudRepo Signup to get started!