IronSledDocs
Projects

Upload Projects

The complete Upload-project workflow in IronSled — choosing the Upload project type during onboarding, what gets provisioned, adding a container-upload repository, preparing a Docker image (docker save), uploading the image tar in the UI, and how images are scanned, published, and tracked by status.

An Upload project is for teams that already have prebuilt container images and need to bring them onto the IronSled platform to be scanned and published — without writing source code or running the platform's build pipeline. Instead of building images from a repository, you upload each image as a Docker image tar (.tar, .tar.gz, or .tgz) directly in the portal, and IronSled scans it with Trivy and publishes it to the internal registry automatically.

External vendors don't create their own Upload project. Your Upload project is created and onboarded for you by an IronSled program manager — you won't see the project-creation or onboarding option in the portal. The onboarding sections below (Choosing the Upload Project Type and What Gets Provisioned) describe what the platform does on your behalf; everything after that — adding container-upload repositories, preparing and uploading images, and tracking scan status — is the workflow you'll use once your project reaches Available status.

This guide walks the full Upload-project journey end to end:

  1. Choose the Upload project type during onboarding.
  2. Submit the short onboarding form (no AI, no source code to plan).
  3. Provisioning creates the project, its team, and an upload repository.
  4. Add a container-upload repository for each container you'll bring in.
  5. Prepare your Docker image with docker save.
  6. Upload the image in the Containers section.
  7. Scanning, publishing, and status — track each version as it goes live.
  8. Deploy and test — publishing an image is not running it; author a Helm chart, request an environment, and roll out your app so you can test it.

Upload projects use the same sections as Code / Build projects (Overview, Team, Repositories, Containers, Environments, Tickets, Reports & Artifacts, Settings) — they differ only in how images arrive: uploaded rather than built. External vendors are typically onboarded as Upload projects by an IronSled program manager on their behalf.

Choosing the Upload Project Type

Project creation starts on the AI-Assisted Onboarding screen (open Project Onboarding from the project list). At the top, a Project Type toggle chooses how the project is provisioned:

OptionIconFor
Code / Buildcode-branchTeams building software on the platform — source repositories, CI/CD, containers, environments, and the full delivery pipeline.
Uploadcloud-uploadTeams bringing prebuilt container images — no source code or build pipeline.

Select Upload. The helper text confirms the choice: "Upload projects are for external users bringing prebuilt container images — no source code or build pipeline," and an information banner explains what happens next: "We'll create the project, its team, and an upload repository for your prebuilt container images. The upload experience itself is provisioned after onboarding."

The AI-Assisted Onboarding screen with the Upload project type selected — the Project Type toggle set to Upload, the upload information banner, and the short Upload form with Project Name, Project Description, Cost Center, and an optional "Anything else we should know?" field, ending in a Submit for Review button

Because there is no source code or build architecture to plan, Upload onboarding is a short manual form — there is no AI-assisted configuration and no CUI question. The form has four fields:

FieldRequiredNotes
Project NameYesAt least 3 characters.
Project DescriptionYesA brief summary of the application.
Cost CenterYesThe charge code the project is billed to.
Anything else we should know?OptionalPoints of contact, expected image sources, timelines, or anything else useful to the platform team.

Click Submit for Review (enabled once the name, description, and cost center are filled in). The project is created with status Submitted, you see a "Project Submitted" confirmation, and reviewers are notified. From here it follows the same lifecycle as any project — Submitted → Reviewing → Implementing → Available.

What Gets Provisioned

When the platform team approves the request, the project moves to Implementing and IronSled provisions it automatically. Access provisioning is identical to a Code / Build project; only the repositories differ.

For every project type, provisioning creates:

  • Okta groups for each access level (owners, developers, etc.), keyed to the project path.
  • A GitLab group under the platform's parent organization, with SAML group links mapping Okta groups to GitLab permissions.
  • Member synchronization — team members added to the matching Okta and GitLab groups at their assigned role.

For an Upload project specifically, instead of source-code repositories it provisions:

  • A container_uploads repository, where uploaded images and their scan artifacts are organized.
  • A Helm chart repository the team populates with its own Helm chart and README. External vendors are required to provide their own chart (internal teams get help building one) — it is what the application is deployed from when you later run it. See From Published Image to Running App.

When all setup tasks complete, the project status changes to Available and the team is notified. Each task's status (pending, in progress, complete, or failed) is visible on the project's onboarding timeline.

Adding a Container-Upload Repository

In an Upload project, each container is backed by a container-upload repository. On the platform's one repository = one container model, creating a container-upload repository automatically creates a matching container — there is no separate "associate container" step.

Open the project's Repositories section and click Add Repository. For an Upload project the repository type is fixed to container-upload (repositories are homogeneous per project — you don't choose a type), and the Add Repository dialog opens with these fields:

FieldNotes
Repository NameThe display name; typing it auto-generates the path.
Path (URL slug)Lowercase, dashes only, no special characters.
TemplateRead-only, shown as External Containers Project"Set by the project type — repositories are homogeneous per project." You don't choose it; it is fixed by the Upload project type (the container-upload template).
DescriptionOptional.

The Add Repository dialog for an Upload project — Repository Name and Path (URL slug) fields, a read-only Template field locked to the container-upload type, an optional Description, and Cancel / Create Repository buttons

Click Create Repository. IronSled creates the repository (private, initialized with a README, default branch main) and associates it with the project, confirming with "Repository was successfully created and associated to the project." The new container-upload repository immediately appears in the Containers section as a container, ready to receive images.

You can also Associate Existing Repository (from the Add Repository split-button menu) to link a container-upload repository that already exists in GitLab, and Sync Repositories to reconcile the list with GitLab. See Repositories for the full repository model.

Preparing Your Docker Image

Uploads take a Docker image saved as a tar. Save it with docker save, and — recommended — gzip it so the upload is much faster and smaller.

Save an image to a tar:

docker save myapp:1.0 -o myapp.tar

Save and compress in one step (smaller, faster upload — typically 2–5× smaller):

docker save myapp:1.0 | gzip > myapp.tar.gz

The Containers section includes a collapsible "New to this? How to prepare your Docker image for upload" help panel with these same steps. Accepted file types are .tar, .tar.gz, and .tgz; any other file is rejected with "Please select a Docker image tar (.tar, .tar.gz, or .tgz)."

Uploading the Image

Open the project's Containers section. Each container-upload repository appears here as a container; expand one to see every uploaded version, its scan status, and where it runs. If a container has no images yet, its card shows "No images uploaded yet" with an Upload image button; a container that already has versions shows an Upload button in its header.

The Containers section of an Upload project — a container card backed by a container-upload repository, the "How to prepare your Docker image for upload" help panel, and the Upload button used to add a new image version

Click Upload (or Upload image) to open the Upload image drawer, titled for the container:

The Upload image drawer — an information banner, a drag-and-drop dropzone with a Browse Files button for a .tar, .tar.gz, or .tgz file, a Tag field, an optional Note field, and Cancel / Upload buttons

  1. Add the file. Drag and drop your image onto the dropzone ("Drag & drop your .tar, .tar.gz, or .tgz here") or click Browse Files. The selected file's name and size are shown, with an option to remove it.
  2. Enter a Tag. For example 1.0.0, 2.3.1, or latest. Tags may use letters, numbers, _, ., and -, up to 128 characters, and cannot start with . or -. This is the tag the image gets in the registry.
  3. Add a Note (optional) — a short note about this image or version.
  4. Click Upload.

The drawer shows live progress (Preparing… → Uploading… → Finalizing…) and cannot be dismissed while an upload is in progress — use Cancel upload to stop it. When it finishes you see "Upload Complete," and the drawer closes. The image is then scanned and published automatically — you do not trigger a pipeline yourself.

You need write access to the container-upload repository to upload an image. The Upload button is disabled while a pipeline is already processing that container ("Wait for it to finish before uploading a new image").

Scanning, Publishing, and Status

After an upload, IronSled runs the image through the pipeline — build/scan/publish — and each version shows a status reflecting where it is in that lifecycle. Expand a container to see its version history, newest first; the latest is marked · current.

StatusMeaning
uploadedUploaded, waiting to be scanned.
scanningA pipeline is building, scanning, or publishing the image. The live phase is shown (building, scanning, publishing, cleaning up), with a View pipeline link to GitLab.
stagedScanned and staged, pending publish.
in registryPublished to the registry and available to pull.
scan failedThe scan did not complete.
upload failedThe upload did not complete.

Each version also shows its Uploaded or Published date and its scan results — either No issues or a severity breakdown (Critical / High / Medium / Low). For an uploaded image, a View pipeline link opens the build in GitLab; the scan report ("Pipeline scan — container:version") shows the full Trivy findings — each CVE with its package, installed and fixed versions, severity, and title.

Status updates arrive live as the pipeline runs, and a scheduled reconciliation job advances any in-flight uploads to their final state and caches their scan summaries — so you do not need to refresh manually.

Recovering Missing Versions

If versions are missing — for example, images published before they were tracked, or a pipeline that did not report back — a Rescan pipelines action (available to platform managers) backfills image versions from the project's GitLab pipeline history.

Permissions

ActionWho can do it
View containers and versionsAll project members
Add a container-upload repositoryProject members with permission to create repositories
Upload an imageProject members with write access to the container-upload repository
Rescan pipelines / recover historyPlatform managers

From Published Image to Running App

Uploading, scanning, and publishing an image makes it available in the registry — it does not deploy or run it. To actually run your application on IronSled so you can test it, two things are required beyond the upload:

  • Your own Helm chart. The Helm chart repository provisioned during onboarding is where you commit your own Helm chart and a README — external vendors are required to provide their chart (internal teams get help building one). This chart is what your application is deployed from, and it should deploy your published images by referencing them from the internal registry.
  • An environment. Every project starts with a dev environment by default; to promote your application up through stage and prod, request the next environment from your project's Environments section. Once your chart is committed and the request is in, the IronSled platform team stands up the application and grants you access to roll it out by restarting the deployment in Rancher.

For the full deploy-and-test path, see Deploy & Troubleshoot.

  • Create a Project — onboarding for both project types, including the review and provisioning lifecycle.
  • Repositories — the full repository model, sync, and the Add Repository / Associate flows.
  • Containers — the Containers section reference for both code and upload projects.
  • Deploy & Troubleshoot — how an upload project is deployed and tested once its images are published.
  • Environments — request and monitor the environment your app runs in.
Edit

On this page