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:
Repository Inventory
List all repositories in your JFrog instance
Note repository types (Maven, Python, etc.)
Document repository sizes
User Access
List all users who need access
Document permission requirements
Note any service accounts for CI/CD
Integration Points
Identify all CI/CD pipelines using JFrog
List all build tools and their configurations
Document any webhook integrations
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:
Visit the CloudRepo Signup Page
Start your 14-day free trial (no credit card required)
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:
Log into the CloudRepo Admin Portal
Navigate to the Repositories section
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:
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]
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
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
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:
Update Documentation
Update team wikis with new repository URLs
Document CloudRepo credentials and access
Update onboarding guides for new developers
Monitor Usage
Check the CloudRepo dashboard for usage patterns
Verify no unexpected errors in build logs
Monitor download speeds and performance
Configure Webhooks (Optional)
If you were using webhooks with JFrog, configure them in CloudRepo. See Webhooks for details.
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!