{"slug":"serverless-git","title":"Serverless Git Deployments","description":"Deploy serverless containers directly from a Git repository. DanubeData clones your code, builds a container image, and deploys it automatically — with optional auto-deploy on every push.","section":"Features","url":"https://docs.danubedata.ro/serverless-git","markdown_url":"https://docs.danubedata.ro/serverless-git.md","breadcrumbs":[{"title":"Features","slug":null},{"title":"Rapids","slug":"serverless-overview"},{"title":"Git Deployments","slug":"serverless-git"}],"headings":[{"level":1,"title":"Serverless Git Deployments","id":"serverless-git-deployments"},{"level":2,"title":"Supported providers","id":"supported-providers"},{"level":2,"title":"Repository authentication","id":"repository-authentication"},{"level":2,"title":"Build methods","id":"build-methods"},{"level":3,"title":"Buildpacks (recommended)","id":"buildpacks-recommended"},{"level":3,"title":"Dockerfile","id":"dockerfile"},{"level":2,"title":"Build pipeline","id":"build-pipeline"},{"level":3,"title":"Build limits","id":"build-limits"},{"level":3,"title":"Build statuses","id":"build-statuses"},{"level":3,"title":"Build actions","id":"build-actions"},{"level":2,"title":"Webhooks","id":"webhooks"},{"level":3,"title":"Automatic setup","id":"automatic-setup"},{"level":3,"title":"Manual webhook setup","id":"manual-webhook-setup"},{"level":3,"title":"Auto-build on push","id":"auto-build-on-push"},{"level":2,"title":"Build logs","id":"build-logs"},{"level":2,"title":"Troubleshooting","id":"troubleshooting"},{"level":3,"title":"Build fails during clone","id":"build-fails-during-clone"},{"level":3,"title":"Build fails during image build","id":"build-fails-during-image-build"},{"level":3,"title":"Build succeeds but container fails to start","id":"build-succeeds-but-container-fails-to-start"},{"level":3,"title":"Webhook not triggering builds","id":"webhook-not-triggering-builds"},{"level":2,"title":"Next steps","id":"next-steps"}],"format":"markdown","word_count":1111,"content":"# Serverless Git Deployments\n\nDeploy serverless containers directly from a Git repository. DanubeData clones your code, builds a container image, and deploys it automatically — with optional auto-deploy on every push.\n\n## Supported providers\n\n| Provider | Repository URL format | Webhook signature |\n|----------|----------------------|-------------------|\n| **GitHub** | `https://github.com/org/repo` | HMAC-SHA256 (`X-Hub-Signature-256`) |\n| **GitLab** | `https://gitlab.com/org/repo` | Token comparison (`X-Gitlab-Token`) |\n| **Bitbucket** | `https://bitbucket.org/org/repo` | HMAC-SHA256 (`X-Hub-Signature`) |\n\nSSH-format URLs (`git@github.com:org/repo.git`) are also supported.\n\n## Repository authentication\n\n| Method | Use case |\n|--------|----------|\n| **None** | Public repositories |\n| **SSH Key** | Private repos. Paste your SSH private key in the dashboard. |\n| **Access Token** | Private repos. Use a personal access token with read permissions. |\n\nFor SSH keys, generate a deploy key with read-only access:\n\n```bash\nssh-keygen -t ed25519 -f deploy_key -N \"\"\n```\n\nAdd the public key (`deploy_key.pub`) to your repo's deploy keys. Paste the private key (`deploy_key`) in DanubeData.\n\nFor access tokens, create a token with repository read permissions in your Git provider's settings.\n\n## Build methods\n\n### Buildpacks (recommended)\n\nBuildpacks auto-detect your application's runtime and build a container image without a Dockerfile. This is the easiest way to get started.\n\n**Supported runtimes:**\n\n| Runtime | Detection file(s) |\n|---------|-------------------|\n| **Node.js** | `package.json` |\n| **Python** | `requirements.txt`, `setup.py`, `pyproject.toml`, `Pipfile` |\n| **Go** | `go.mod`, `go.sum` |\n| **Java** | `pom.xml`, `build.gradle`, `build.gradle.kts` |\n| **Ruby** | `Gemfile`, `Gemfile.lock` |\n| **PHP** | `composer.json`, `index.php` |\n| **.NET** | `*.csproj`, `*.fsproj`, `*.sln` |\n| **Rust** | `Cargo.toml` |\n\n**Available builders:**\n\n| Builder | Best for |\n|---------|----------|\n| **Paketo Base** | Java, Node.js, Python, Go, Ruby, .NET. Good default. |\n| **Paketo Full** | Extended language support with more system libraries. |\n| **Paketo Tiny** | Go applications. Produces minimal images. |\n| **Google Cloud Buildpacks** | Node.js, Python, Go, Java. |\n| **Heroku Builder 22** | Node.js, Python, Ruby, PHP, Go, Java. Familiar if coming from Heroku. |\n\n### Dockerfile\n\nUse your own Dockerfile for full control over the build.\n\n**Configuration:**\n\n| Setting | Default | Description |\n|---------|---------|-------------|\n| **Dockerfile path** | `Dockerfile` | Path to the Dockerfile relative to the repo root |\n| **Build context** | `/` | Directory used as the Docker build context |\n\nExample for a non-standard layout:\n\n```\nDockerfile path: docker/Dockerfile.production\nBuild context: /\n```\n\n## Build pipeline\n\nWhen a build is triggered (manually or via webhook), DanubeData runs a Tekton pipeline:\n\n```\nClone Repository\n      |\n      v\nDetect Runtime (Buildpacks)\n      |\n      v\nBuild Image (Buildpacks or Dockerfile)\n      |\n      v\nPush to Registry (registry.danubedata.ro)\n      |\n      v\nDeploy (Knative Service via GitOps)\n```\n\n### Build limits\n\n| Limit | Value |\n|-------|-------|\n| **Build timeout** | 30 minutes |\n| **Concurrent builds per team** | 3 |\n| **Builds per day per team** | 50 |\n| **Build log access** | 10 days after completion; history metadata is separate |\n\n### Build statuses\n\n| Status | Description |\n|--------|-------------|\n| **Pending** | Queued, waiting for build resources |\n| **Cloning** | Fetching source code from the repository |\n| **Building** | Building the container image |\n| **Pushing** | Uploading the image to the registry |\n| **Succeeded** | Build completed, deployment in progress |\n| **Failed** | Build failed — check build logs |\n| **Cancelled** | Build cancelled by user |\n\n### Build actions\n\n| Action | Description |\n|--------|-------------|\n| **Trigger Build** | Start a new build manually (from the Actions dropdown) |\n| **Cancel** | Stop an in-progress build |\n| **Retry** | Retry a failed build with the same configuration |\n| **Redeploy** | Deploy a previously succeeded build without rebuilding |\n\n## Webhooks\n\n### Automatic setup\n\nWhen you create a Git-deployed container, DanubeData generates:\n\n- **Webhook URL** — The endpoint your Git provider should call on push\n- **Webhook Secret** — Used to verify webhook signatures\n\nBoth are displayed in the **Activity** tab of the container detail page. (Builds and deployments now share this single tab.)\n\n### Manual webhook setup\n\n1. Copy the Webhook URL and Secret from the Activity tab\n2. In your Git provider's repository settings, add a new webhook:\n\n**GitHub:**\n1. Go to Settings > Webhooks > Add webhook\n2. **Payload URL** — Paste the webhook URL\n3. **Content type** — `application/json`\n4. **Secret** — Paste the webhook secret\n5. **Events** — Select \"Just the push event\"\n\n**GitLab:**\n1. Go to Settings > Webhooks\n2. **URL** — Paste the webhook URL\n3. **Secret token** — Paste the webhook secret\n4. **Trigger** — Check \"Push events\"\n\n**Bitbucket:**\n1. Go to Repository settings > Webhooks > Add webhook\n2. **URL** — Paste the webhook URL\n3. **Secret** — Paste the webhook secret\n4. **Triggers** — Select \"Repository push\"\n\n### Auto-build on push\n\nWhen **auto-build on push** is enabled (default), every push to the configured branch triggers a new build and deployment.\n\nTo disable auto-build:\n1. Navigate to the container **Edit** page\n2. Uncheck **Auto-build on push**\n3. Save\n\nWith auto-build disabled, you can still trigger builds manually from the dashboard or via the API.\nDisabling it also prevents queued push-triggered jobs and deferred pushes from\nstarting a build. A build that has already started is allowed to finish; use\n**Cancel** if you also need to stop that build.\n\n## Build logs\n\nView build logs from the **Activity** tab:\n\n1. Navigate to the container detail page\n2. Click the **Activity** tab\n3. Click on a build to view its logs\n\nLogs stream live as the build runs and refresh on their own, so you can watch progress in real time. You get the full build output — there is no line limit — across all stages: clone, build, and push.\n\nCompleted build output is available for ten days after completion. Expired output\ncannot be fetched again through the console or API; hourly cleanup removes its\nstored text while retaining build history metadata. This is a platform policy,\nnot a per-container setting. Keep sensitive information out of build output.\n\nIf a deploy fails, the container shows a plain-language reason with a hint on how to fix it — for example an architecture mismatch, an image or tag that can't be found, running out of memory, or a startup that timed out.\n\n## Troubleshooting\n\n### Build fails during clone\n\n- Verify the repository URL is correct\n- For private repos, check that your SSH key or access token has read permissions\n- Ensure the branch exists in the repository\n\n### Build fails during image build\n\n- **Buildpacks:** Ensure your project has the correct detection files (e.g., `package.json` for Node.js)\n- **Dockerfile:** Verify the Dockerfile path is correct and the file is valid\n- Check build logs for specific error messages\n- Ensure your application's dependencies can be resolved (no private package registries without credentials)\n\n### Build succeeds but container fails to start\n\n- Check that your application listens on the configured port (default: 8080)\n- Verify environment variables are set correctly\n- Check container logs from the detail page for runtime errors\n- Ensure the container runs as non-root (UID 1000) — modify your Dockerfile if needed\n\n### Webhook not triggering builds\n\n- Verify the webhook URL and secret match exactly\n- Check your Git provider's webhook delivery logs for errors\n- Ensure the push is to the configured branch\n- Confirm auto-build on push is enabled\n\n## Next steps\n\n- [Serverless overview](https://docs.danubedata.ro/serverless-overview) — Full feature documentation\n- [Custom domains](https://docs.danubedata.ro/serverless-domains) — Add your own domain\n- [Invoking containers](https://docs.danubedata.ro/serverless-invoking) — Code examples for calling your container\n\n---\n\n**Questions?** Contact support at support@danubedata.ro\n","prev":{"title":"Custom Domains","slug":"serverless-domains","url":"https://docs.danubedata.ro/serverless-domains","markdown_url":"https://docs.danubedata.ro/serverless-domains.md","json_url":"https://docs.danubedata.ro/serverless-domains.json"},"next":{"title":"Private Container Registry","slug":"serverless-private-registry","url":"https://docs.danubedata.ro/serverless-private-registry","markdown_url":"https://docs.danubedata.ro/serverless-private-registry.md","json_url":"https://docs.danubedata.ro/serverless-private-registry.json"},"index_url":"https://docs.danubedata.ro/index.json"}