Skip to main content

b2c-import-set-migrations

Create and apply ordered, idempotent B2C Commerce site import/export archives from discovered cartridge metadata and project migrations using `b2c job import-set`. Use this opt-in project workflow for migrations built from focused instance exports, repeatable setup, onboarding, and CI/CD imports that apply once per instance. Also covers source exclusions, post-import README notes, resetting history, and recovering an interrupted run.

来源信息

仓库
SalesforceCommerceCloud/b2c-developer-tooling
最近来源活动
2026年9月12日 01:17
检测到的 SKILL.md 语言
英语
星标
54
分支
21

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
2 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
b2c-import-set-migrations
description
Create and apply ordered, idempotent B2C Commerce site import/export archives from discovered cartridge metadata and project migrations using `b2c job import-set`. Use this opt-in project workflow for migrations built from focused instance exports, repeatable setup, onboarding, and CI/CD imports that apply once per instance. Also covers source exclusions, post-import README notes, resetting history, and recovering an interrupted run.
# Import Set Migrations Skill Use `b2c job import-set` to apply site import/export archives from discovered cartridge `metadata/` directories followed by project migrations. Each archive is applied once per instance and skipped on later runs. Re-running the command is the intended workflow for local setup, developer onboarding, and CI/CD. > [!IMPORTANT] > **This is an optional, opt-in, project-level approach — not a default workflow.** A project adopts it deliberately by keeping import-set sources with its code and running `b2c job import-set` from setup scripts or CI. Follow an existing project's conventions. If a project only uses occasional one-off site imports, use the `b2c-cli:b2c-site-import-export` skill instead. > **Tip:** If `b2c` is not installed globally, use `npx @salesforce/b2c-cli` instead (e.g., `npx @salesforce/b2c-cli job import-set`). ## Configuration & Authentication The CLI auto-discovers the target instance and credentials from `SFCC_*` environment variables (including project `.env`), the selected project-local or shared `dw.json`, and configuration plugins. `package.json` supplies only non-sensitive defaults. **Flags like `--server`, `--client-id`, `--client-secret`, `--username`, and `--password` are usually unnecessary** — only pass them to override what's auto-detected. `job import-set` requires both OAuth and WebDAV credentials. Run `b2c setup inspect` to confirm the resolved configuration; see the `b2c-cli:b2c-config` skill for precedence rules and troubleshooting. ## Import Sources and Order The command considers cartridge metadata first, followed by the project migrations directory (`./migrations` by default). Discovered cartridges are ordered by name, and archives within each source are ordered lexically. A cartridge `metadata/` directory can use either layout: - If it resembles a standard site import/export archive, the entire `metadata/` directory is one archive. - Otherwise, each immediate child directory or `.zip` file is one archive, matching the migrations-directory behavior. Keep each cartridge in one form rather than mixing an archive layout with ordered children. Directory-based archives must contain at least one file. The project migrations directory contains immediate child directories and `.zip` files as archives. Hidden entries and other loose files are ignored: ```text migrations/ ├── 20260801T140000-add-preferences/ │ ├── README.md # post-import note for THIS archive (see below) │ ├── meta/ │ │ └── system-objecttype-extensions.xml │ └── sites/ │ └── RefArch/ │ └── preferences.xml ├── 20260802T091500-seed-content.zip └── README.md # top-level README is not an archive ``` Each archive directory (or the contents of each zip) uses the standard site import/export archive layout that `b2c job import` accepts. For archive structure and metadata XML patterns, see the `b2c-cli:b2c-site-import-export` skill. ### Naming convention Name every ordered child archive `YYYYMMDDTHHmmss-description`, e.g. `20260801T140000-add-preferences`. Use UTC so ordering is stable across time zones. Names identify applied archives, so never edit or reuse a name after it has been applied; add a new, later-sorting archive instead. ## Commands ```bash # Preview: show pending vs. already-applied archives; writes nothing to the instance b2c job import-set --dry-run # Apply the default ./migrations directory (safe to repeat) b2c job import-set # Apply a different directory b2c job import-set ./data-migrations # Import project migrations without discovered cartridge metadata b2c job import-set --no-cartridge-metadata # Exclude project-relative source trees recursively b2c job import-set --import-set-exclude fixtures --import-set-exclude test/integration # Keep each uploaded archive on the instance after import (for inspection) b2c job import-set --keep-archive ``` ### Flags | Flag | Description | Default | | --------------------------- | ---------------------------------------------------------------------------------- | ------------ | | `--dry-run` | Show pending and applied archives without locking, importing, or writing state | `false` | | `--keep-archive`, `-k` | Keep each uploaded archive on the instance after import | `false` | | `--[no-]cartridge-metadata` | Include imports from discovered cartridge `metadata/` directories | `true` | | `--import-set-exclude` | Exclude a project-relative directory recursively from source discovery; repeatable | | | `--set-id` | Name an independent import history | `migrations` | | `--break-lock` | Recover an interrupted import-set run immediately | `false` | | `--stale-lock-seconds` | Consider an inactive import-set run recoverable after this many seconds | `1800` | | `--lock-poll-interval` | Seconds between checks while waiting for another run | `3` | | `--timeout`, `-t` | Timeout in seconds for each individual import job | No timeout | | `--poll-interval` | Job polling interval in seconds | `3` | | `--show-log` | Show the job log when an import fails | `true` | | `--json` | Emit machine-readable archive statuses and counts; suppress human output | `false` | ### Source exclusions `--import-set-exclude` accepts repeated flags or comma-separated paths. Paths are relative to `--project-directory` or the current project and exclude the directory and all descendants from source discovery. The setting is also available as: - `import-set-exclude` in `dw.json` - `b2c.importSetExclude` in `package.json`, which is suitable for committed project defaults - comma-separated `SFCC_IMPORT_SET_EXCLUDE` Exclusions select source directories; they do not remove files from inside a selected archive. ## Post-Import Notes (per-archive README) Some migrations require **manual follow-up** that cannot be captured in an archive — for example enabling an instance-specific site preference, wiring a service credential in Business Manager, or flipping a feature toggle after the data lands. Document these in a `README.md` (or `README`) file at the top of a directory-based archive, whether it comes from cartridge metadata or project migrations. After a run, the CLI prints the notes for archives it applied in a consolidated **Post-import notes** summary. ```text migrations/ └── 20260801T140000-add-preferences/ ├── README.md ├── meta/ └── sites/ ``` **`20260801T140000-add-preferences/README.md`:** ```markdown # Add feature-X preferences Manual follow-up (per instance): 1. In Business Manager, go to Merchant Tools > Site Preferences > Feature X. 2. Set the API endpoint to the instance-specific value (not imported — differs per environment). 3. Save and verify the storefront picks it up. ``` Behavior: - Notes are surfaced only for archives **applied in this run** (freshly imported). Archives already applied on the instance (skipped) do not repeat their notes, so the summary reflects only what just changed. - `--dry-run` shows the notes for **pending** archives as a preview, so you can review manual steps before committing to the import. - Only directory-based archives are scanned for a README; `.zip` archives are not. `README.md` takes precedence over `README`. An empty README produces no note. - The top-level README of the set directory itself is not an archive and is not printed — use it for human-facing docs about the set as a whole. - With `--json`, notes are not printed; each archive's note text is available in the JSON result instead. This is the idiomatic place to record "what a human must still do" for a migration — keep archive contents safe to reapply and push environment-specific manual work into the note. ## Repeat Runs After each successful import, the target instance records that archive's name. Later runs skip it without comparing contents. Key rules: - An interrupted run can retry its current archive, so every archive must be safe to apply more than once. - Applied state is shared across developers, checkouts, and CI runners targeting the same instance. - Never edit an applied archive. Add a new, later-sorting archive for every change. - Keep names distinct within an import history; UTC timestamps make collisions unlikely. ## Set IDs (namespaces) The default import history is named `migrations` and is shared by runs against the same instance, regardless of local directory path. Most projects should **omit `--set-id`**. Use it only to intentionally maintain an independent migration history on the same instance, or to preserve a legacy namespace whose archive names cannot follow the timestamp convention. ## Concurrent Runs and Recovery Only one runner applies a given history at a time. Other runners wait and then skip archives completed while they were waiting. An interrupted run becomes recoverable after 30 minutes by default; tune this with `--stale-lock-seconds`. Use `--break-lock` when it must be recovered immediately. ## Idiomatic Workflows ### Local setup / onboarding Commit the cartridge metadata and/or `./migrations` sources to the repo. New developers point the CLI at their sandbox and run: ```bash b2c job import-set --dry-run # see what will apply b2c job import-set # apply; read the post-import notes for manual steps ``` Running it again later applies only the migrations added since. ### CI/CD Run `b2c job import-set` as a deploy step against staging/production. It is safe to run on every pipeline invocation — only unapplied archives import. Prefer `--json` to capture the applied/skipped counts and per-archive note text for logs or downstream summaries: ```bash b2c job import-set --json > import-set-result.json ``` Concurrent pipeline runs coordinate automatically. ### Adding a new migration 1. Reserve a new name with the current UTC timestamp: `20260815T120000-add-loyalty-attrs/`. 2. For hand-authored data, create that directory and put the site archive contents inside (`meta/`, `sites/`, etc.). For instance-owned data, use the direct export workflow below. 3. If manual follow-up is needed, add a `README.md` describing it. 4. Run `b2c job import-set --dry-run`, review the pending archive, and commit. The next apply run imports only unapplied archives. ### Building a migration from an instance export When the desired state already exists on an instance, export it instead of reconstructing XML from memory. Load these related skills before acting: - `b2c-cli:b2c-config` to confirm the source instance. - `b2c-cli:b2c-job` for export data units and `--output` behavior. - `b2c-cli:b2c-site-import-export` for archive layout, XML patterns, and schema-valid trimming. - `b2c-cli:b2c-content` for selected Page Designer pages, components, content blocks, and assets. - `b2c:b2c-metadata` when editing system attributes, custom object definitions, or site preferences. Export directly into the import-set source tree and edit the resulting archive in place. A temporary review directory followed by a copy is optional, not the default. `b2c job export --output migrations` extracts the platform archive under a newly generated `*_export` directory. Rename that one new directory immediately to the reserved permanent migration name, before previewing or applying the import set: ```bash b2c setup inspect -i <SOURCE_INSTANCE> # Site descriptor, including a site's cartridge path b2c job export \ --site <SITE_ID> \ --site-data site_descriptor \ --output migrations \ -i <SOURCE_INSTANCE> # Other focused examples b2c job export --site <SITE_ID> --site-data site_preferences --output migrations -i <SOURCE_INSTANCE> b2c job export --global-data meta_data --output migrations -i <SOURCE_INSTANCE> b2c job export --library <LIBRARY_ID> --output migrations -i <SOURCE_INSTANCE> # Rename the one newly generated archive root once, then edit it in place. mv migrations/<GENERATED_EXPORT_DIR> migrations/<YYYYMMDDTHHmmss>-<description> ``` For selected Page Designer/content items, preview the match set and point the focused exporter directly at the final migration directory; it writes archive-relative `libraries/` or site-library content without a generated wrapper: ```bash b2c content export <CONTENT_ID> --library <LIBRARY_ID> --dry-run --show-tree -i <SOURCE_INSTANCE> b2c content export <CONTENT_ID> \ --library <LIBRARY_ID> \ --output migrations/<YYYYMMDDTHHmmss>-<description> \ -i <SOURCE_INSTANCE> ``` Add `--site-library` for a site-private library. After any export, inspect every file and remove unrelated data, generated `version.txt`, environment-specific values, and secrets—including encrypted or hashed password values. Preserve the standard archive-relative layout and keep schema-required companion fields; validate trimmed XML against the matching B2C XSD rather than assuming a partial document is valid. Never export over an existing or applied archive. Use a temporary directory only intentionally, such as when comparing multiple exploratory exports or when a tool cannot isolate a new archive safely under the import-set directory. ## Resetting Import History There is no dedicated reset command. Prefer starting a separate history so the old one remains intact: ```bash b2c job import-set --set-id migrations-reset-20260818 ``` Continue using that set ID on future runs. To clear the default history in place instead, remove it through WebDAV and rerun: ```bash b2c webdav rm --root=impex b2c-cli/import-sets/migrations b2c job import-set ``` For a custom set ID, replace the final path segment. Clearing history makes every current archive pending again, so use it only when all archives are safe to reapply. `--break-lock` recovers an interrupted run; it does not reset history. ## Import Failure Recovery Fix the archive or target-instance problem and rerun. Archives already applied are skipped, and the failed archive retries. `--show-log` is enabled by default and displays the platform job log for a failed import. ## Related Skills - `b2c-cli:b2c-site-import-export` - Single archive import/export, site-archive folder structure, and metadata XML patterns - `b2c-cli:b2c-job` - Running and monitoring jobs, including individual archive imports and `job search`/`job wait` - `b2c:b2c-metadata` - System object extensions, custom object definitions, and site preferences - `b2c-cli:b2c-webdav` - Clearing an import history when an in-place reset is required - `b2c-cli:b2c-config` - Resolving instance and credential configuration
在 GitHub 查看