mirror of
https://github.com/kubescape/kubescape.git
synced 2026-02-14 18:09:55 +00:00
242 lines
5.2 KiB
Markdown
242 lines
5.2 KiB
Markdown
# Building Kubescape
|
|
|
|
This guide covers how to build Kubescape from source.
|
|
|
|
## Table of Contents
|
|
|
|
- [Prerequisites](#prerequisites)
|
|
- [Building the CLI](#building-the-cli)
|
|
- [Building Docker Images](#building-docker-images)
|
|
- [Build Options](#build-options)
|
|
- [Development Setup](#development-setup)
|
|
- [Troubleshooting](#troubleshooting)
|
|
|
|
---
|
|
|
|
## Prerequisites
|
|
|
|
### Required
|
|
|
|
- **Go 1.23+** - [Installation Guide](https://golang.org/doc/install)
|
|
- **Git** - For cloning the repository
|
|
- **Make** - For running build commands
|
|
|
|
### Optional (for Docker builds)
|
|
|
|
- **Docker** - [Installation Guide](https://docs.docker.com/get-docker/)
|
|
- **Docker Buildx** - For multi-platform builds (included with Docker Desktop)
|
|
- **GoReleaser** - [Installation Guide](https://goreleaser.com/install/)
|
|
|
|
### Verify Prerequisites
|
|
|
|
```bash
|
|
go version # Should be 1.23 or higher
|
|
git --version
|
|
make --version
|
|
docker --version # Optional
|
|
goreleaser --version # Optional
|
|
```
|
|
|
|
---
|
|
|
|
## Building the CLI
|
|
|
|
### Clone the Repository
|
|
|
|
```bash
|
|
git clone https://github.com/kubescape/kubescape.git
|
|
cd kubescape
|
|
```
|
|
|
|
### Build with Make
|
|
|
|
```bash
|
|
# Build for your current platform
|
|
make build
|
|
|
|
# The binary will be at ./kubescape
|
|
./kubescape version
|
|
```
|
|
|
|
### Build Directly with Go
|
|
|
|
```bash
|
|
go build -o kubescape .
|
|
```
|
|
|
|
### Build with GoReleaser
|
|
|
|
```bash
|
|
# Build for your current platform
|
|
RELEASE=v0.0.1 CLIENT=local goreleaser build --snapshot --clean --single-target
|
|
```
|
|
|
|
### Cross-Compilation
|
|
|
|
Build for different platforms:
|
|
|
|
```bash
|
|
# Linux (amd64)
|
|
GOOS=linux GOARCH=amd64 go build -o kubescape-linux-amd64 .
|
|
|
|
# Linux (arm64)
|
|
GOOS=linux GOARCH=arm64 go build -o kubescape-linux-arm64 .
|
|
|
|
# macOS (amd64)
|
|
GOOS=darwin GOARCH=amd64 go build -o kubescape-darwin-amd64 .
|
|
|
|
# macOS (arm64 / Apple Silicon)
|
|
GOOS=darwin GOARCH=arm64 go build -o kubescape-darwin-arm64 .
|
|
|
|
# Windows (amd64)
|
|
GOOS=windows GOARCH=amd64 go build -o kubescape-windows-amd64.exe .
|
|
```
|
|
|
|
---
|
|
|
|
## Building Docker Images
|
|
|
|
Kubescape uses [GoReleaser](https://goreleaser.com/) to build its Docker images. The Dockerfiles are specifically designed to work with GoReleaser's build pipeline, which handles cross-compilation and places binaries in the expected directory structure.
|
|
|
|
### Build with GoReleaser
|
|
|
|
The recommended way to build Docker images locally is using GoReleaser. Note that `RELEASE`, `CLIENT`, and `RUN_E2E` environment variables are required:
|
|
|
|
```bash
|
|
# Build all artifacts and Docker images locally without publishing
|
|
# --skip=before,krew,nfpm,sbom skips unnecessary steps for faster local builds
|
|
RELEASE=v0.0.1 CLIENT=local RUN_E2E=false goreleaser release --snapshot --clean --skip=before,nfpm,sbom
|
|
```
|
|
|
|
Please read the [GoReleaser documentation](https://goreleaser.com/customization/dockers_v2/#testing-locally) for more details on using it for local testing.
|
|
|
|
---
|
|
|
|
## Build Options
|
|
|
|
### Make Targets
|
|
|
|
| Target | Description |
|
|
|--------|-------------|
|
|
| `make build` | Build the Kubescape binary |
|
|
| `make test` | Run unit tests |
|
|
| `make all` | Build everything |
|
|
| `make clean` | Remove build artifacts |
|
|
|
|
### Build Tags
|
|
|
|
You can use Go build tags to customize the build:
|
|
|
|
```bash
|
|
# Example with build tags
|
|
go build -tags "netgo" -o kubescape .
|
|
```
|
|
|
|
### Version Information
|
|
|
|
To embed version information in the build:
|
|
|
|
```bash
|
|
VERSION=$(git describe --tags --always)
|
|
BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
COMMIT=$(git rev-parse HEAD)
|
|
|
|
go build -ldflags "-X main.version=$VERSION -X main.buildDate=$BUILD_DATE -X main.commit=$COMMIT" -o kubescape .
|
|
```
|
|
|
|
---
|
|
|
|
## Development Setup
|
|
|
|
### Install Development Dependencies
|
|
|
|
```bash
|
|
# Install golangci-lint for linting
|
|
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
|
|
|
# Install other tools as needed
|
|
go mod download
|
|
```
|
|
|
|
### Run Tests
|
|
|
|
```bash
|
|
# Run all tests
|
|
make test
|
|
|
|
# Run tests with coverage
|
|
go test -cover ./...
|
|
|
|
# Run specific package tests
|
|
go test ./core/...
|
|
```
|
|
|
|
### Run Linter
|
|
|
|
```bash
|
|
golangci-lint run
|
|
```
|
|
|
|
### Code Formatting
|
|
|
|
```bash
|
|
go fmt ./...
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Build Fails with "module not found"
|
|
|
|
```bash
|
|
# Update dependencies
|
|
go mod tidy
|
|
go mod download
|
|
```
|
|
|
|
### CGO-related Errors
|
|
|
|
If you encounter CGO errors, try building with CGO disabled:
|
|
|
|
```bash
|
|
CGO_ENABLED=0 go build -o kubescape .
|
|
```
|
|
|
|
### Docker Build Fails
|
|
|
|
Ensure Docker daemon is running and you have sufficient permissions.
|
|
|
|
If you encounter an error like `failed to calculate checksum ... "/linux/amd64/kubescape": not found`, it usually means you are trying to run `docker build` manually. Because the Dockerfiles are optimized for GoReleaser, you should use the `goreleaser release --snapshot` command described in the [Building Docker Images](#building-docker-images) section instead.
|
|
|
|
```bash
|
|
# Check Docker status
|
|
docker info
|
|
```
|
|
|
|
### Out of Memory During Build
|
|
|
|
For systems with limited memory:
|
|
|
|
```bash
|
|
# Limit Go's memory usage
|
|
GOGC=50 go build -o kubescape .
|
|
```
|
|
|
|
---
|
|
|
|
## Dockerfiles
|
|
|
|
| File | Description |
|
|
|------|-------------|
|
|
| `build/Dockerfile` | Full Kubescape image with HTTP handler |
|
|
| `build/kubescape-cli.Dockerfile` | Minimal CLI-only image |
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- [Contributing Guide](https://github.com/kubescape/project-governance/blob/main/CONTRIBUTING.md)
|
|
- [Architecture](../docs/architecture.md)
|
|
- [Getting Started](../docs/getting-started.md)
|