Shipyard
आधिकारिकशिपयार्ड CLI एक MCP सर्वर प्रदान करता है जो एजेंटों को सीधे शिपयार्ड वातावरण प्रबंधित करने में सक्षम बनाता है: लॉग खींचकर, ब्रांचों की तुलना करके, परीक्षण चलाकर, और वातावरण को रोककर/शुरू करके।
Shipyard MCP के साथ आप क्या कर सकते हैं?
- पर्यावरणों की सूची देखें — पूछें कि कौन-से पर्यावरण चल रहे हैं; रिपॉज़िटरी, ब्रांच, पुल रिक्वेस्ट नंबर या नाम के आधार पर फ़िल्टर करें।
- किसी पर्यावरण का निरीक्षण करें — UUID के आधार पर किसी विशिष्ट पर्यावरण का विवरण प्राप्त करें, जिसमें उसकी सेवाएँ और एक्सपोज़ किए गए पोर्ट शामिल हैं।
- सेवा लॉग पढ़ें — चल रहे पर्यावरण में किसी सेवा के लॉग दिखाएँ; चाहें तो आउटपुट को लगातार देखते रहें।
- पर्यावरण का जीवनचक्र प्रबंधित करें — UUID के आधार पर किसी पर्यावरण को रोकें, फिर से शुरू करें, रद्द करें, दोबारा बनाएँ या पुनर्जीवित करें।
- पर्यावरण वेरिएबल कॉन्फ़िगर करें — किसी पर्यावरण पर env vars सेट करें और उन्हें लागू करने के लिए सेवा को फिर से शुरू करें।
- पुश किए गए बदलाव की पुष्टि करें —
verifyप्रॉम्प्ट का उपयोग करके किसी पुश किए गए बदलाव को उसके पर्यावरण के विरुद्ध जाँचें।
दस्तावेज़
Shipyard CLI
Shipyard प्लेटफ़ॉर्म पर Ephemeral Environments को प्रबंधित करने का एक टूल।
AI assistant का उपयोग कर रहे हैं? CLI में एक MCP server शामिल है: AI assistant से Shipyard का उपयोग करें देखें।
इंस्टॉलेशन
-
Linux और macOS
curl https://www.shipyard.sh/install.sh | bashयह
/usr/local/binमें इंस्टॉल होता है और वहाँ लिखने में असमर्थ होने पर हीsudoका उपयोग करता है। किसी दूसरी जगह, जैसे कि आपकी अपनी किसी डायरेक्टरी में इंस्टॉल करने के लिए,SHIPYARD_INSTALL_DIRसेट करें:curl https://www.shipyard.sh/install.sh | SHIPYARD_INSTALL_DIR="$HOME/.local/bin" bash -
Windows रिलीज़ पेज पर जाएँ और Windows के लिए एक्ज़ीक्यूटेबल डाउनलोड करें।
-
Homebrew
brew tap shipyard/tap brew install shipyard
डाउनलोड की पुष्टि करना
हर रिलीज़ में एक checksums.txt प्रकाशित होता है, जिसमें हर बाइनरी का SHA-256 होता है। इंस्टॉल स्क्रिप्ट बाइनरी की
उससे जाँच करती है और मेल न होने पर इंस्टॉल करने से मना कर देती है। खुद डाउनलोड की गई बाइनरी की जाँच करने के लिए:
grep " shipyard-darwin-arm64$" checksums.txt | shasum -a 256 -c -
checksums.txt उसी रिलीज़ से आता है जिससे बाइनरी आती है, इसलिए यह खराब या अधूरे डाउनलोड का पता लगाता है, न कि ऐसी
रिलीज़ का जिसकी फ़ाइलें बदल दी गई हों। नीचे दिया गया attestation यह जाँचता है कि बाइनरी इस repo के रिलीज़
workflow से बनाई गई थी।
1.9.0 के बाद की रिलीज़ में, हर बाइनरी के साथ एक signed build provenance attestation भी होता है, जो बताता है कि उसे किस workflow run,
commit और tag ने बनाया, और एक SPDX SBOM (shipyard-<os>-<arch>.sbom.json; Windows पर .exe.sbom.json) होता है, जिसमें
बताया जाता है कि उसे किन चीज़ों से बनाया गया था। डाउनलोड की गई रिलीज़ का नाम देकर GitHub CLI से attestation की पुष्टि करें
(यहाँ v1.10.0):
gh attestation verify shipyard-darwin-arm64 -R shipyard/shipyard-cli \
--signer-workflow shipyard/shipyard-cli/.github/workflows/release.yaml \
--source-ref refs/tags/v1.10.0
--source-ref को बनाए रखें: इसके बिना, जाँच किसी भी branch पर workflow की कॉपी से signed किसी भी चीज़ के लिए पास हो जाती है, न कि सिर्फ़
उस रिलीज़ के tag build के लिए।
जाँच tag का नाम लेती है, commit का नहीं। वापस ली गई रिलीज़ के attestations हटाए नहीं जाते, इसलिए अगर कोई version कभी
उसी tag के तहत फिर से रिलीज़ किया जाता है, तो उसकी वापस ली गई बाइनरी भी जाँच में पास हो जाती है। Commit को भी पिन करने के लिए,
--source-digest <commit SHA> को उस commit के साथ जोड़ें जिस पर tag इंगित करता है।
रिलीज़ को फिर से बनाना
1.10.0 के बाद की रिलीज़ reproducible हैं: उसी Go और GoReleaser versions के साथ रिलीज़ tag को फिर से build करने पर,
किसी भी डायरेक्टरी में byte-identical बाइनरी मिलती हैं। उस tag के
.github/workflows/release.yaml में versions GO_VERSION और GORELEASER_VERSION हैं। उस GoReleaser को इंस्टॉल करके, और नीचे
1.26.11 की जगह GO_VERSION रखकर
(GOTOOLCHAIN Go को ठीक वही version इस्तेमाल करने देता है, ज़रूरत पड़ने पर उसे डाउनलोड करके, और GOFLAGS= आपके अपने
build flags हटा देता है):
git clone https://github.com/shipyard/shipyard-cli && cd shipyard-cli
git checkout vX.Y.Z
GOTOOLCHAIN=go1.26.11 GOFLAGS= goreleaser release --clean --skip=publish,sbom
grep " shipyard-linux-amd64$" dist/checksums.txt
Digest रिलीज़ के checksums.txt में उसी पंक्ति से मेल खाना चाहिए। अगर ऐसा नहीं है, तो रिलीज़ पर संदेह करने से पहले अपने Go और GoReleaser
versions (GOTOOLCHAIN=go1.26.11 go version, goreleaser --version) जाँचें। रिलीज़ workflow हर रिलीज़ commit पर, रिलीज़ build करने से पहले, इसकी जाँच करता है
(scripts/check-reproducible.sh)। SBOM reproducible नहीं होते: उनमें उनके बनाए जाने का समय दर्ज होता है। CLI के अपने module की entry में version
(devel) दिखता है, क्योंकि build में Go का VCS stamp शामिल नहीं होता; shipyard --version रिलीज़ version दिखाता है।
अपग्रेड करना
shipyard upgrade
shipyard update भी यही काम करता है। यह नवीनतम रिलीज़ इंस्टॉल करता है और उसके रिलीज़ नोट दिखाता है। Homebrew इंस्टॉल को
brew upgrade shipyard से अपग्रेड किया जाता है; अन्य सभी इंस्टॉल में रिलीज़ बाइनरी डाउनलोड होती है, रिलीज़ के
checksums.txt से उसकी पुष्टि की जाती है और चल रही बाइनरी को उससे बदल दिया जाता है। अगर वह बाइनरी ऐसी डायरेक्टरी में है जहाँ आप लिख नहीं सकते, जैसे
/usr/local/bin, तो sudo shipyard upgrade चलाएँ।
प्री-रिलीज़ शामिल करने के लिए --prerelease जोड़ें, या मौजूदा रिलीज़ फिर से इंस्टॉल करने के लिए --force जोड़ें (Homebrew इंस्टॉल के लिए,
इसके बजाय brew reinstall shipyard का उपयोग करें)।
1.9.0 या उससे पुराने version से अपग्रेड करना
1.9.0 और उससे पुराने versions में shipyard update versions की तुलना टेक्स्ट के रूप में करता है, इसलिए यह 1.10.0 और उसके बाद के versions को
आपके मौजूदा version से पुराना बताता है। जिस तरीके से आपने इंस्टॉल किया था, उसी तरीके से एक बार अपग्रेड करें; उसके बाद से
shipyard upgrade काम करेगा:
- Linux और macOS:
curl https://www.shipyard.sh/install.sh | bash - Windows: रिलीज़ पेज से एक्ज़ीक्यूटेबल डाउनलोड करें
- Homebrew:
brew upgrade shipyard
अपडेट सूचनाएँ
नई रिलीज़ आने पर, CLI किसी कमांड के पूरा होने के बाद आपको बताता है, दिन में अधिकतम एक बार:
A new version of shipyard is available: 1.9.0 → 1.10.0
Run `shipyard upgrade` to install it. Release notes: https://github.com/shipyard/shipyard-cli/releases/tag/v1.10.0
यह कभी कुछ पूछता नहीं है और न ही इनपुट का इंतज़ार करता है। जाँच आपके कमांड के चलने के दौरान बैकग्राउंड में होती है; अगर कमांड पूरा होने तक यह
खत्म नहीं हुई, तो CLI इसके लिए अधिकतम एक सेकंड इंतज़ार करता है। ऐसा सिर्फ़ तब होता है जब यह GitHub से संपर्क कर रहा हो—दिन में लगभग
एक बार, या आपके छूटे हुए रिलीज़ नोट लाने के लिए। किसी अन्य तरीके से अपग्रेड करने के बाद पहली बार चलाने पर, जैसे
brew upgrade, वे नोट दिखते हैं।
संदेश stderr पर जाता है और सिर्फ़ तब दिखता है जब stderr एक terminal हो। यह CI में, अपनी पहचान बताने वाले AI coding agents
(Claude Code, Codex, Cursor's agent, Gemini CLI) के भीतर, या shipyard mcp serve के लिए कभी नहीं दिखता। इसे बंद करने के लिए,
SHIPYARD_NO_UPDATE_CHECK=1 सेट करें या ~/.shipyard/config.yaml में update_check: false जोड़ें।
सेल्फ़-अपडेट बंद करना
ऐसे self-hosted Shipyard पर जो GitHub तक नहीं पहुँच सकता, CLI आपके Shipyard रिलीज़ के साथ आता है। वहाँ
~/.shipyard/config.yaml में self_update: false सेट करके, या SHIPYARD_SELF_UPDATE=false से सेल्फ़-अपडेट बंद करें। इसके बाद CLI
कभी GitHub से संपर्क नहीं करता: न अपडेट सूचना, न shipyard mcp serve से बैकग्राउंड जाँच, और shipyard upgrade यह संदेश देकर मना कर देता है
कि सेल्फ़-अपडेट बंद है। update_check: false सिर्फ़ सूचना और बैकग्राउंड जाँच बंद करता है।
लॉगिन
CLI को शुरू करने के लिए shipyard login चलाएँ। यह आपको ब्राउज़र में Shipyard में लॉगिन करने के लिए कहेगा। इसके बाद CLI
आपका API token एक स्थानीय config में सेव करेगा। अब आप कमांड चलाना शुरू कर सकते हैं।
Self-hosted Shipyard
Self-hosted Shipyard का उपयोग करने के लिए, लॉगिन करने से पहले ~/.shipyard/config.yaml में उसके API का पता दें (या SHIPYARD_API_URL के साथ):
api_url: https://shipyard.example.internal/api/v1
self_update: false
इसके बाद shipyard login उस host का login page खोलेगा और हर कमांड उसी API को कॉल करेगा। अगर इंस्टॉल GitHub तक नहीं पहुँच सकता, तो
self_update: false सेट करें (सेल्फ़-अपडेट बंद करना देखें)।
अगर आपने पहले ही किसी दूसरे Shipyard (जैसे shipyard.build) में लॉगिन किया है, तो shipyard login उस token को बनाए रखता है और बताता है
कि आप लॉगिन हैं। Self-hosted इंस्टॉल में लॉगिन करने से पहले config फ़ाइल से api_token हटाएँ (और SHIPYARD_API_TOKEN को unset करें)।
या अपना Token मैन्युअल रूप से सेट करें
अपने Shipyard API token को SHIPYARD_API_TOKEN environment variable की value के रूप में सेट करें।
इसे पाने के लिए अपने profile page पर जाएँ।
अगर आप अपने org के लिए API access चालू करना चाहते हैं, तो support@shipyard.build पर हमसे संपर्क करें। अगर आपके कोई और सवाल हैं, तो हमारे समुदाय के Slack में शामिल हों।
shipyard set token
इसके बजाय, आप डिफ़ॉल्ट रूप से $HOME/.shipyard/config.yaml में रखी गई configuration फ़ाइल का उपयोग कर सकते हैं।
पहली बार CLI चलाने पर यह एक डिफ़ॉल्ट खाली config बनाएगा, जिसे आप फिर संपादित कर सकते हैं।
किसी भी कमांड में --config {path} flag जोड़कर, आप डिफ़ॉल्ट के अलावा किसी दूसरे config path को भी निर्दिष्ट कर सकते हैं।
अपने config में कोई भी configuration values जोड़ें और सुनिश्चित करें कि फ़ाइल YAML syntax का पालन करती हो। उदाहरण के लिए:
api_token: <your-token>
org: <your-non-default-org>
आपके environment variables की values, config में उनकी संबंधित values को ओवरराइड करती हैं।
बुनियादी उपयोग
उन सभी orgs को देखें जिनके आप सदस्य हैं
shipyard get orgs
डिफ़ॉल्ट global org सेट करें
shipyard set org {org-name}
मौजूदा configured org देखें
shipyard get org
सभी environments की सूची देखें
shipyard get environments
उपलब्ध flags:
| Name | Description | Type | Default Value |
|---|---|---|---|
| branch | Branch name से फ़िल्टर करें | string | |
| deleted | हटाए गए environments लौटाएँ | boolean | false |
| json | पूरा JSON output प्रिंट करें | boolean | false |
| name | Application के name से फ़िल्टर करें | string | |
| org-name | Org name से फ़िल्टर करें, अगर आप कई orgs के सदस्य हैं | string | आपका डिफ़ॉल्ट org |
| page | अनुरोधित page number | int | 1 |
| page-size | अनुरोधित page size | int | 20 |
| pull-request-number | Pull request number से फ़िल्टर करें | string | |
| repo-name | Repo name से फ़िल्टर करें | string |
उदाहरण:
- Branch
mainपर repoflask-backendचलाने वाले सभी environments की सूची देखें:
shipyard get environments --repo-name flask-backend --branch main
- सभी हटाए गए environments की सूची देखें:
shipyard get environments --deleted
किसी environment के UUID से उसकी जानकारी देखें
shipyard get environment {environment_uuid}
उपलब्ध flags:
| Name | Description | Type | Default Value |
|---|---|---|---|
| json | पूरा JSON output प्रिंट करें | boolean | false |
| org | Environment का org, अगर आप कई orgs के सदस्य हैं | string | आपका डिफ़ॉल्ट org |
| bypass-token | Scripts के लिए सिर्फ़ environment का bypass token प्रिंट करें | boolean | false |
--bypass-token से कोई script token का उपयोग कर सकती है, बिना किसी के उसे टाइप या प्रिंट किए:
SHIPYARD_TOKEN=$(shipyard get environment {environment_uuid} --bypass-token) && \
export SHIPYARD_TOKEN && curl -b "shipyard_token=$SHIPYARD_TOKEN" https://your-environment-url/
चल रहे environment को रोकें
shipyard stop environment {environment_uuid}
रुके हुए environment को फिर से शुरू करें
shipyard restart environment {environment_uuid}
किसी environment का जारी build रद्द करें
shipyard cancel environment {environment_uuid}
किसी environment को फिर से build करें
shipyard rebuild environment {environment_uuid}
हटाए गए environment को फिर से सक्रिय करें
shipyard revive environment {environment_uuid}
Detached environment deploy करें
मौजूदा application build को clone करके एक नया, स्वतंत्र ("detached") environment बनाएँ। इसके लिए आपके org में detached environments चालू होने चाहिए।
shipyard detached deploy {application_build_uuid} --name my-detached-env
हर repo के लिए branches ओवरराइड करें और नियंत्रित करें कि नए commits आने पर detached environment फिर से build हो या नहीं:
# Override the branch for a repo, and never rebuild on new commits
shipyard detached deploy {application_build_uuid} --name my-detached-env --branch web=feature-x --build-on-commit never
# Per-repo build-on-commit settings (always | inherit | never)
shipyard detached deploy {application_build_uuid} --build-on-commit-for web=always --build-on-commit-for api=never
Detached environment हटाएँ
Environment का UUID दें, या उसके किसी भी application build का UUID दें (जो build detail page के URL में होता है)। इस तरीके से सिर्फ़ detached environments हटाए जा सकते हैं; base, pull request या remote environment को हटाने से मना कर दिया जाएगा। पहले से हटाए गए environment को फिर से हटाने पर भी सफलता मिलती है।
shipyard detached delete {environment_uuid}
shipyard detached delete {application_build_uuid}
किसी environment के सभी services और exposed ports देखें
shipyard get services --env {environment_uuid}
चल रहे environment की service में Exec करें
किसी running environment की दी गई service में, किसी भी arguments और flags के साथ कोई भी command चलाएँ। Command arguments को double slash के बाद दें। Session environment को idle होने के कारण रुकने से सिर्फ़ तब तक बचाए रखता है जब तक आप उसमें टाइप करते हैं, अधिकतम 12 घंटे तक।
shipyard exec --env {environment_uuid} --service {service_name} -- bash
चल रहे environment की service के port को Port forward करें
shipyard port-forward --env {environment_uuid} --service {service_name} --ports {local_port}:{service_container_port}
खुला हुआ port-forward या logs --follow environment को idle होने के कारण रुकने से अधिकतम 12 घंटे तक बचाए रखता है।
चल रहे environment की service के logs देखें
shipyard logs --env {environment_uuid} --service {service_name}
किसी environment पर जाएँ
shipyard visit {environment_uuid}
उपलब्ध flags:
| Name | Description | Type | Default Value |
|---|---|---|---|
| follow | Logs output को लगातार दिखाएँ | boolean | false |
| tail | दिखाने के लिए हाल की log lines की संख्या | int | 3000 |
Volumes के साथ काम करें
किसी environment के सभी volumes की सूची देखें
shipyard get volumes --env {environment_uuid}
किसी environment के सभी volume snapshots की सूची देखें
shipyard get snapshots --env {environment_uuid}
किसी environment में volume रीसेट करें
shipyard reset volume --env {environment_uuid}
किसी environment में snapshot बनाएँ
shipyard create snapshot --env {environment_uuid}
किसी environment में volume snapshot लोड करें
shipyard load snapshot --env {environment_uuid} --sequence-number {n}
किसी environment के volume में फ़ाइल अपलोड करें
shipyard upload volume --env {environment_uuid} --volume {volume} --file {filepath.bz2}
REST API को सीधे कॉल करें
shipyard api /api/v1/environment
shipyard api -X PUT /api/v1/environment/{environment_uuid}/env-vars --input body.json
Paths की शुरुआत /api/v1 या /api/v2 से होनी चाहिए; आपका token और org अपने आप जोड़ दिए जाते हैं।
bypass_token और kubeconfig credentials को छिपा दिया जाता है, जब तक कि आप --include-secrets पास न करें।
Telepresence से कनेक्ट करें
shipyard telepresence connect --env {environment_uuid}
वहाँ से, आप नेमस्पेस के सभी पॉड्स से सीधे संवाद कर पाएँगे। सेवाओं से संवाद करने के लिए आपको शायद नेमस्पेस होस्टनेम का उपयोग करना पड़े, जिसे आप Namespace फ़ील्ड के अंतर्गत telepresence status से प्राप्त कर सकते हैं। उदाहरण के लिए, redis से संवाद करने के लिए आप redis.shipyard-app-build-{uuid} का उपयोग करेंगे।
कोड से निष्पादन योग्य फ़ाइल बनाएँ:
आप निम्न कमांड चलाकर एक निष्पादन योग्य फ़ाइल बना सकते हैं:
make
इस नई निष्पादन योग्य फ़ाइल को चलाने के लिए:
./shipyard
ऑटोकम्प्लीशन सक्षम करें
Bash
यह स्क्रिप्ट bash-completion पैकेज पर निर्भर करती है। यदि यह पहले से इंस्टॉल नहीं है, तो आप इसे अपने OS के
पैकेज मैनेजर के माध्यम से इंस्टॉल कर सकते हैं।
अपने मौजूदा शेल सत्र में कम्प्लीशन लोड करने के लिए:
source <(shipyard completion bash)
हर नए सत्र के लिए कम्प्लीशन लोड करने हेतु, निम्नलिखित को एक बार चलाएँ।
Linux पर:
shipyard completion bash > /etc/bash_completion.d/shipyard
macOS पर:
shipyard completion bash > $(brew --prefix)/etc/bash_completion.d/shipyard
Zsh
यदि आपके परिवेश में शेल कम्प्लीशन पहले से सक्षम नहीं है, तो आपको इसे सक्षम करना होगा। आप निम्नलिखित को एक बार चला सकते हैं:
echo "autoload -U compinit; compinit" >> ~/.zshrc
अपने मौजूदा शेल सत्र में कम्प्लीशन लोड करने के लिए:
source <(shipyard completion zsh); compdef _shipyard shipyard
हर नए सत्र के लिए कम्प्लीशन लोड करने हेतु, निम्नलिखित को एक बार चलाएँ।
Linux पर:
shipyard completion zsh > "${fpath[1]}/_shipyard"
macOS पर:
shipyard completion zsh > $(brew --prefix)/share/zsh/site-functions/_shipyard
इस सेटअप को प्रभावी होने के लिए आपको एक नया शेल शुरू करना होगा।
Fish
अपने मौजूदा शेल सत्र में कम्प्लीशन लोड करने के लिए:
$ shipyard completion fish | source
हर सत्र के लिए कम्प्लीशन लोड करने हेतु, इसे एक बार चलाएँ:
shipyard completion fish > ~/.config/fish/completions/shipyard.fish
PowerShell
अपने मौजूदा शेल सत्र में कम्प्लीशन लोड करने के लिए:
shipyard completion powershell | Out-String | Invoke-Expression
हर नए सत्र के लिए कम्प्लीशन लोड करने हेतु, चलाएँ:
shipyard completion powershell > shipyard.ps1
और इस फ़ाइल को अपनी PowerShell प्रोफ़ाइल से सोर्स करें।
AI सहायक से Shipyard का उपयोग करें (MCP)
shipyard mcp serve एक Model Context Protocol सर्वर चलाता है, ताकि Claude Code, Claude Desktop, Cursor या Codex जैसा कोई
सहायक आपके परिवेशों की सूची बना सके, उनका निरीक्षण कर सके, उन्हें फिर से बना सके और कॉन्फ़िगर कर सके, सेवा लॉग पढ़ सके, वॉल्यूम प्रबंधित कर सके, और पुश किए गए बदलाव को उसके परिवेश के विरुद्ध सत्यापित कर सके।
CLI में लॉग इन होने के बाद, इसे Claude Code में जोड़ें:
claude mcp add shipyard -- shipyard mcp serve
फिर इस तरह के प्रश्न पूछें:
- "कौन-से परिवेश
webrepo के लिए चल रहे हैं?" - "मेरी branch के परिवेश पर
apiसेवा के लॉग दिखाएँ।" - "इस परिवेश का नवीनतम बिल्ड क्यों विफल हुआ?"
- "इस परिवेश पर
FEATURE_FLAGS=betaसेट करें औरworkerसेवा को रीस्टार्ट करें।" - "मैंने अभी पुश किया है। बदलाव को उसके परिवेश के विरुद्ध सत्यापित करें।" (या
/mcp__shipyard__verify)
इसे अन्य क्लाइंट में सेट अप करने, कॉन्फ़िगरेशन, टूल की पूरी सूची,
verify प्रॉम्प्ट और समस्या निवारण के लिए MCP guide देखें।