A Dockerized CLI application which allows you to automatically sync different resources between two commercetools projects. As of now, these are the supported resources:
- CartDiscounts
- Categories
- InventoryEntries
- Products
- ProductTypes
- Types
- States
- TaxCategories
- CustomObjects
- Customers
- ShoppingLists
-
Make sure you have
JDK 8
installed. -
The following fields are required to be set on the following resources (and sub-resources), if they will be synced:
Resource/ Sub-resource Required Fields Product key
,sku
Product Variant key
Product Variant Asset (if exists) key
ProductType key
Type key
Category key
Category Asset (if exists) key
CartDiscount key
InventoryEntry sku
State key
TaxCategory key
CustomObject container
ANDkey
Customer key
Customer Address key
ShoppingList key
ShoppingList LineItem - Product Variant sku
ShoppingList TextLineItem name
-
Set the following environment variables before running the application
export SOURCE_PROJECT_KEY = "source-project-key" export SOURCE_CLIENT_ID = "sourceClientId" export SOURCE_CLIENT_SECRET = "sourceClientSecret" export SOURCE_AUTH_URL = "https://auth.eu-central-1.aws.commercetools.com/" #optional parameter export SOURCE_API_URL = "https://api.eu-central-1.aws.commercetools.com/" #optional parameter export TARGET_PROJECT_KEY = "target-project-key" export TARGET_CLIENT_ID = "targetClientId" export TARGET_CLIENT_SECRET = "targetClientSecret" export TARGET_AUTH_URL = "https://auth.eu-central-1.aws.commercetools.com/" #optional parameter export TARGET_API_URL = "https://api.eu-central-1.aws.commercetools.com/" #optional parameter
Note: For *_AUTH_URL and *_API_URL parameter values, you can use different authentication endpoints and API endpoints.
usage: commercetools-project-sync
-f,--full By default, a delta sync runs using
last-sync-timestamp logic. Use this
flag to run a full sync. i.e. sync
the entire data set.
-h,--help Print help information.
-r,--runnerName <arg> Choose a name for the running sync
instance. Please make sure the name
is unique, otherwise running more
than 1 sync instance with the same
name would lead to an unexpected
behaviour. (optional parameter)
default: 'runnerName'.
-s,--sync <arg> Choose one of the following modules
to run: "types", "productTypes",
"cartDiscounts", "customObjects",
"categories", "products",
"inventoryEntries", "states",
"taxCategories", "customers",
"shoppingLists" or "all".
--syncProjectSyncCustomObjects Sync custom objects that were created
with project sync (this application).
-v,--version Print the version of the application.
By default, running the sync without using -f
or --full
option would run a delta sync; which means that only resources
which have been modified since the last time the sync has run would be synced. The application achieves that by
persisting the last sync timestamp on commercetools using CustomObjects
on every sync run.
The last sync timestamp customObject
for a runner name testRun
running a Type Sync from a source commercetools project with the key java-sync-source-dev1
looks as follows:
{
"id": "0ee39da2-21fd-46b4-9f99-44eae7f249a1",
"version": 2,
"container": "commercetools-project-sync.testRun.typeSync",
"key": "java-sync-source-dev1",
"value": {
"lastSyncDurationInMillis": 972,
"applicationVersion": "3.1.0",
"lastSyncTimestamp": "2019-05-24T11:17:00.602Z",
"lastSyncStatistics": {
"processed": 0,
"failed": 0,
"created": 0,
"updated": 0,
"reportMessage": "Summary: 0 types were processed in total (0 created, 0 updated and 0 failed to sync)."
}
},
"createdAt": "2019-05-24T11:18:12.831Z",
"lastModifiedAt": "2019-05-24T11:19:01.822Z",
"lastModifiedBy": {
"clientId": "8bV3XSW-taCph843-GQTa8lf",
"isPlatformClient": false
},
"createdBy": {
"clientId": "8bV3XSW-taCph843-GQTa8lf",
"isPlatformClient": false
}
}
- The
container
has the convention:commercetools-project-sync.{runnerName}.{syncModuleName}
. - The
key
contains the source project key. - The
value
contains the informationlastSyncDurationInMillis
,applicationVersion
,lastSyncTimestamp
andlastSyncStatistics
. - These custom objects will not be synced with the custom object syncer unless the option --syncProjectSyncCustomObjects is added.
Note: Another customObject
with the container
convention commercetools-project-sync.{runnerName}.{syncModuleName}.timestampGenerator
is also created on the target project for capturing a unified timestamp from commercetools.
Running a Full sync using -f
or --full
option will not create any customObjects
.
docker pull commercetools/commercetools-project-sync:3.9.0
docker run \
-e SOURCE_PROJECT_KEY=xxxx \
-e SOURCE_CLIENT_ID=xxxx \
-e SOURCE_CLIENT_SECRET=xxxx \
-e TARGET_PROJECT_KEY=xxxx \
-e TARGET_CLIENT_ID=xxxx \
-e TARGET_CLIENT_SECRET=xxxx \
commercetools/commercetools-project-sync:3.9.0 -s all
- To run the all sync modules from a source project to a target project
This will run the following sync modules in the given order:
docker run commercetools/commercetools-project-sync:3.9.0 -s all
Type
Sync andProductType
Sync andStates
Sync andTaxCategory
Sync andCustomObject
Sync in parallel.Category
Sync andInventoryEntry
Sync andCartDiscount
Sync andCustomer
Sync in parallel.Product
Sync.ShoppingList
Sync.
-
To run the type sync
docker run commercetools/commercetools-project-sync:3.9.0 -s types
-
To run the productType sync
docker run commercetools/commercetools-project-sync:3.9.0 -s productTypes
-
To run the states sync
docker run commercetools/commercetools-project-sync:3.9.0 -s states
-
To run the taxCategory sync
docker run commercetools/commercetools-project-sync:3.9.0 -s taxCategories
-
To run the category sync
docker run commercetools/commercetools-project-sync:3.9.0 -s categories
-
To run the product sync
docker run commercetools/commercetools-project-sync:3.9.0 -s products
-
To run the cartDiscount sync
docker run commercetools/commercetools-project-sync:3.9.0 -s cartDiscounts
-
To run the inventoryEntry sync
docker run commercetools/commercetools-project-sync:3.9.0 -s inventoryEntries
-
To run the customObject sync
docker run commercetools/commercetools-project-sync:3.9.0 -s customObjects
-
To run the customer sync
docker run commercetools/commercetools-project-sync:3.9.0 -s customers
-
To run the shoppingList sync
docker run commercetools/commercetools-project-sync:3.9.0 -s shoppingLists
-
To run all sync modules using a runner name
docker run commercetools/commercetools-project-sync:3.9.0 -s all -r myRunnerName