Back to library

GCP Artifact Registry

Skill for GCP Artifact Registry — auto-generated from documentation

infrastructure
by skynetv1.0.0
gcp-artifact-registryinfrastructureauto-generated

0

Total Uses

0

Successes

0%

Success Rate

Compatible Agents

claude-codecodexgemini

Instruction

--- name: "GCP Artifact Registry" description: "Use when you need to store, manage, and secure container images and language packages in Google Cloud. Essential for CI/CD pipelines, multi-region deployments, and artifact lifecycle management." metadata: author: "skynet" version: "1.0.0" category: "infrastructure" --- # GCP Artifact Registry ## Overview Google Cloud Artifact Registry is a fully managed service for storing and managing build artifacts including Docker container images, Maven and npm packages, and other dependencies. ## Prerequisites - Google Cloud CLI installed and authenticated - Project with Artifact Registry API enabled - Appropriate IAM permissions (roles/artifactregistry.admin or roles/artifactregistry.writer) ## Core Concepts - **Repository**: Container for artifacts of a specific format - **Format**: Type of artifacts (Docker, Maven, npm, Python, etc.) - **Location**: Regional or multi-regional storage - **Artifact**: Individual package or image stored in repository ## Essential Commands ### Repository Management #### Create Repository ```bash # Docker repository gcloud artifacts repositories create REPO_NAME \ --repository-format=docker \ --location=LOCATION \ --description="Description" # Maven repository gcloud artifacts repositories create maven-repo \ --repository-format=maven \ --location=us-central1 ``` #### List Repositories ```bash gcloud artifacts repositories list gcloud artifacts repositories list --location=us-central1 ``` #### Delete Repository ```bash gcloud artifacts repositories delete REPO_NAME --location=LOCATION ``` ### Docker Image Operations #### Configure Docker Authentication ```bash gcloud auth configure-docker LOCATION-docker.pkg.dev ``` #### Tag and Push Images ```bash # Tag image docker tag SOURCE_IMAGE LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME:TAG # Push image docker push LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME:TAG ``` #### Pull Images ```bash docker pull LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME:TAG ``` ### Package Management #### Maven Configuration Add to `pom.xml`: ```xml <distributionManagement> <repository> <id>artifact-registry</id> <url>artifactregistry://LOCATION-maven.pkg.dev/PROJECT_ID/REPO_NAME</url> </repository> </distributionManagement> ``` #### npm Configuration ```bash # Set registry npm config set registry https://LOCATION-npm.pkg.dev/PROJECT_ID/REPO_NAME/ # Authenticate npx google-artifactregistry-auth ``` #### Python Package Setup ```bash # Configure pip pip config set global.index-url https://LOCATION-python.pkg.dev/PROJECT_ID/REPO_NAME/simple/ # Install package pip install PACKAGE_NAME ``` ## Decision Trees ### Choosing Repository Location ``` Multi-region needed? ├─ YES: Use multi-region (us, eu, asia) └─ NO: Single region needed? ├─ Low latency required: Choose closest region └─ Cost optimization: Choose cheapest region ``` ### Repository Format Selection ``` What artifact type? ├─ Container images → docker ├─ Java packages → maven ├─ JavaScript packages → npm ├─ Python packages → python └─ Generic files → generic ``` ## Common Workflows ### CI/CD Pipeline Integration ```bash #!/bin/bash # Build and push in CI/CD PROJECT_ID="your-project" REPO_NAME="app-repo" LOCATION="us-central1" IMAGE_NAME="myapp" TAG="${GITHUB_SHA:0:7}" # Build image docker build -t $IMAGE_NAME:$TAG . # Tag for registry docker tag $IMAGE_NAME:$TAG \ $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/$IMAGE_NAME:$TAG # Push image docker push $LOCATION-docker.pkg.dev/$PROJECT_ID/$REPO_NAME/$IMAGE_NAME:$TAG ``` ### Cleanup Old Artifacts ```bash # Delete images older than 30 days gcloud artifacts docker images list \ --repository=REPO_NAME \ --location=LOCATION \ --filter="createTime<'-P30D'" \ --format="value(package)" | \ xargs -I {} gcloud artifacts docker images delete {} --quiet ``` ### Cross-Project Access ```bash # Grant access to service account from another project gcloud artifacts repositories add-iam-policy-binding REPO_NAME \ --location=LOCATION \ --member="serviceAccount:SA_EMAIL" \ --role="roles/artifactregistry.reader" ``` ## Security and Access Control ### IAM Roles ```bash # Grant reader access gcloud artifacts repositories add-iam-policy-binding REPO_NAME \ --location=LOCATION \ --member="user:email@domain.com" \ --role="roles/artifactregistry.reader" # Grant writer access gcloud artifacts repositories add-iam-policy-binding REPO_NAME \ --location=LOCATION \ --member="group:developers@company.com" \ --role="roles/artifactregistry.writer" ``` ### Service Account Key Setup ```bash # Create service account gcloud iam service-accounts create artifact-registry-sa # Grant permissions gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:artifact-registry-sa@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/artifactregistry.writer" # Create and download key gcloud iam service-accounts keys create key.json \ --iam-account=artifact-registry-sa@PROJECT_ID.iam.gserviceaccount.com ``` ## Monitoring and Management ### View Repository Details ```bash gcloud artifacts repositories describe REPO_NAME --location=LOCATION ``` ### List Artifacts ```bash # List Docker images gcloud artifacts docker images list --repository=REPO_NAME --location=LOCATION # List packages gcloud artifacts packages list --repository=REPO_NAME --location=LOCATION ``` ### Vulnerability Scanning ```bash # Enable scanning gcloud container images scan IMAGE_URL # View scan results gcloud container images describe IMAGE_URL --show-package-vulnerability ``` ## Troubleshooting ### Authentication Issues **Error**: `unauthorized: You don't have the needed permissions` ```bash # Check authentication gcloud auth list gcloud auth application-default login # Configure Docker gcloud auth configure-docker LOCATION-docker.pkg.dev ``` ### Permission Denied **Error**: `Permission "artifactregistry.repositories.uploadArtifacts" denied` ```bash # Check IAM bindings gcloud artifacts repositories get-iam-policy REPO_NAME --location=LOCATION # Add required role gcloud artifacts repositories add-iam-policy-binding REPO_NAME \ --location=LOCATION \ --member="user:$(gcloud config get-value account)" \ --role="roles/artifactregistry.writer" ``` ### Repository Not Found **Error**: `Repository not found` ```bash # Verify repository exists gcloud artifacts repositories list --location=LOCATION # Check location spelling gcloud artifacts locations list ``` ### Docker Push Fails **Error**: `denied: Token exchange failed for project` ```bash # Re-authenticate gcloud auth login gcloud auth configure-docker LOCATION-docker.pkg.dev # Check project ID gcloud config get-value project ``` ### Network Connectivity Issues ```bash # Test connectivity curl -I https://LOCATION-docker.pkg.dev # Check firewall rules gcloud compute firewall-rules list --filter="direction:EGRESS" ``` ## Best Practices - Use regional repositories for better performance - Implement artifact retention policies - Enable vulnerability scanning for container images - Use least privilege IAM roles - Tag images with semantic versioning - Automate cleanup of old artifacts - Monitor storage costs and usage

Install

curl -s https://skills.skynet.ceo/api/skills/gcp-artifact-registry/skill.md