Multi-Cloud Setup
Skyhook workflows work seamlessly across cloud providers with consistent configuration patterns.AWS (EKS + ECR)
Requirements:- Amazon EKS cluster
- Amazon ECR repository (created automatically by workflows)
- IAM role or access keys for GitHub Actions
aws- Cloud provider123456789- AWS account IDus-east-1- AWS regionmy-cluster- EKS cluster name
- ✅ Recommended: OIDC with IAM roles (no long-lived credentials)
- Alternative: IAM access keys
GCP (GKE + Artifact Registry)
Requirements:- Google GKE cluster
- Google Artifact Registry or GCR
- Service account or Workload Identity for GitHub Actions
gcp- Cloud providermy-project- GCP project IDus-central1- GCP location/regionmy-cluster- GKE cluster name
- ✅ Recommended: Workload Identity Federation (no service account keys)
- Alternative: Service account key JSON
Azure (AKS + ACR)
Requirements:- Azure AKS cluster
- Azure Container Registry
- Service principal or managed identity for GitHub Actions
azure- Cloud providersubscription-id- Azure subscription IDeastus- Azure regionmy-cluster- AKS cluster name
- Service principal credentials
- Managed identity (for self-hosted runners)
Authentication Setup
AWS Authentication
Option 1: OIDC with IAM Roles (Recommended)
Benefits:- No long-lived credentials to manage
- Automatic credential rotation
- Better security posture
- Follows AWS best practices
-
Create OIDC Provider in AWS
- Go to IAM → Identity Providers
- Add provider for
token.actions.githubusercontent.com - Configure audience:
sts.amazonaws.com
-
Create IAM Role
- Create a role with trust policy for GitHub OIDC
- Attach policies:
AmazonEKSClusterPolicy,AmazonEC2ContainerRegistryFullAccess - Note the role ARN
-
Configure GitHub Repository Variables
- Go to GitHub Repository → Settings → Secrets and Variables → Actions
- Add repository variable:
AWS_DEPLOY_ROLE=arn:aws:iam::123456789:role/github-actions-deploy
Option 2: IAM Access Keys
Setup steps:-
Create IAM User
- Create user for GitHub Actions
- Attach policies:
AmazonEKSClusterPolicy,AmazonEC2ContainerRegistryFullAccess
-
Generate Access Keys
- Create access key for the user
- Save access key ID and secret access key
-
Configure GitHub Repository Secrets
AWS_ACCESS_KEY_ID= your access key IDAWS_SECRET_ACCESS_KEY= your secret access key
GCP Authentication
Option 1: Workload Identity Federation (Recommended)
Benefits:- No service account keys to manage
- Automatic credential rotation
- Better security posture
- Follows GCP best practices
-
Create Workload Identity Pool and Provider
-
Create Service Account and Grant Permissions
-
Allow GitHub Repository to Impersonate
-
Configure GitHub Repository Variables
WIF_PROVIDER=projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/github-actions/providers/githubWIF_SERVICE_ACCOUNT=github-actions-deploy@PROJECT_ID.iam.gserviceaccount.com
Option 2: Service Account Keys
Setup steps:-
Create Service Account
- Go to IAM & Admin → Service Accounts
- Create service account with GKE and GCR permissions
-
Generate Key
- Create JSON key for the service account
- Download the key file
-
Configure GitHub Repository Secret
GCP_CREDENTIALS= paste the entire JSON key file contents
GitHub Authentication
For accessing deployment repositories or other GitHub resources:Option 1: GitHub Apps (Recommended)
Benefits:- Fine-grained permissions
- Better security than PATs
- Automatic token refresh
- Can be installed on multiple repositories
- Create GitHub App with required permissions
- Install app on repositories
- Configure GitHub secrets:
GH_APP_ID= your GitHub App IDGH_APP_PK= your GitHub App private key
Option 2: Personal Access Tokens
Setup steps:- Create PAT with
reposcope - Configure GitHub secret:
GHA_PAT= your personal access token
Secrets Management
Configure secrets in GitHub Repository Settings → Secrets and Variables → Actions.Required Secrets by Cloud Provider
AWS with OIDC:AWS_DEPLOY_ROLE(variable) - IAM role ARN
AWS_ACCESS_KEY_ID(secret)AWS_SECRET_ACCESS_KEY(secret)
WIF_PROVIDER(variable)WIF_SERVICE_ACCOUNT(variable)
GCP_CREDENTIALS(secret)
GH_APP_ID(secret)GH_APP_PK(secret)- OR
GHA_PAT(secret)
Advanced Features
Separate Deployment Repositories
Skyhook supports separating your application code from deployment configuration for better organization and security. Repository structure:.koala.toml:
- Separate permissions for code and config
- Shared deployment patterns across services
- Easier management of multi-service deployments
- Security teams can review config changes independently
Deploy Config Source Format
Override the deployment repository or path at runtime using thedeploy_config_source input.
Format:
@feature-branch- Same repo, different branch:services/payment- Same repo, different pathAcme/deployments@main:services/api- Different repo, specific branch and pathOtherOrg/configs:k8s/staging- Different org, specific path- Empty - Uses repository defaults from
.koala.toml
- Test configuration from a feature branch
- Use different deployment repos for different environments
- Override paths for special deployments
Environment Configuration Overrides
Apply runtime configuration changes without modifying files in your repository. Format: JSON object mapping file paths to key-value pairs Example:- Override environment variables per deployment
- Test feature flags without code changes
- Adjust configuration for specific deployments
- Emergency configuration changes
Progressive Delivery with Argo Rollouts
When Argo Rollouts is enabled, Skyhook workflows support advanced deployment strategies. Features:- Canary deployments - Gradually shift traffic to new version
- Blue-green deployments - Switch all traffic after validation
- Automatic rollback on failures
- Traffic splitting and promotion
- Success metric monitoring
- Deploys new version using rollout strategy
- Monitors rollout progress
- Waits for manual or automatic promotion
- Marks deployment successful only after rollout completes
Managing Workflows
Generated Workflow Files
When you create a service, Skyhook generates workflows in.github/workflows/:
Updating Workflows
To regenerate workflows after configuration changes:--reset flag ensures complete regeneration from templates, incorporating any changes from your .koala.toml configuration.
When to regenerate:
- Changed cloud provider
- Enabled/disabled ArgoCD
- Modified deployment repository settings
- Updated to latest workflow templates
- Added/removed Argo Rollouts
Customizing Workflows
You can customize generated workflows in three ways:1. Add Custom Steps
Insert additional steps between existing actions:2. Override Inputs
Modify default input values:3. Replace Actions
Swap Skyhook actions with your own implementations:Workflow Actions Reference
Skyhook workflows use composable GitHub Actions published under theskyhook-io organization:
Core Actions
skyhook-io/determine-image-tag-action@v1- Smart tag generation with branch, date, counterskyhook-io/docker-build-push-action@v1- Multi-registry Docker builds with cachingskyhook-io/cloud-login-action@v1- Universal cloud authentication (AWS/GCP/Azure)skyhook-io/kustomize-deploy-action@v1- Smart deployment (GitOps or kubectl)skyhook-io/parse-cloud-provider-cluster-action@v1- Parse cloud provider tuple formatskyhook-io/parse-deploy-config-source@v1- Parse deployment source formatskyhook-io/patch-env-files@v1- Apply runtime configuration overridesskyhook-io/rollouts-wait-action@v1- Wait for Argo Rollouts completionskyhook-io/github-auth-token-action@v1- GitHub authentication for cross-repo access
- Versioned for stability
- Open source and auditable
- Maintained by Skyhook
- Documented in their respective repositories
Security Best Practices
- Use OIDC/Workload Identity - Avoid long-lived credentials whenever possible
- Separate Environments - Different clusters for dev/staging/prod with isolated credentials
- Protect Main Branch - Require PR reviews before merging to prevent unauthorized deployments
- GitOps for Production - Use ArgoCD for critical environments to maintain audit trail
- Test in Staging - Always test deployments before production
- Monitor Rollouts - Use Argo Rollouts for gradual rollouts with automatic rollback
- Tag Production Releases - Use semantic versioning for production deployments
- Rotate Credentials - Regularly rotate any long-lived credentials
- Audit Access - Review who has access to GitHub secrets and cloud resources
- Use Separate Deployment Repos - Isolate configuration from code for better security
Next Steps
- Using Workflows - Learn how to deploy your services
- Troubleshooting - Resolve common issues
- GitOps with ArgoCD - Set up declarative deployments
- GitHub Actions Setup - Configure GitHub credentials
