Skip to content

What is Walis ​

Walis is a self-hosted CI/CD server. It runs your shell scripts on a schedule, on a webhook, or when you press a button, and it keeps the logs.

That is deliberately less than Jenkins or Woodpecker do. The difference is what it does not require.

The trade Walis makes ​

JenkinsWoodpeckerWalis
Needs a Git forgenoyesno
Needs containersnoin practice yesoptional
Needs a runtime on agentsJVMcontainer runtimenothing
Pipeline lives inUI or Jenkinsfilerepo YAML onlyUI, exportable to JSON
Reads a Jenkinsfile—noyes, as an import
Plugin isolationnonecontainerJavaScript sandbox

Jenkins can do anything because its plugins run unsandboxed in the same JVM — that is also why one bad plugin takes down the controller. Woodpecker gets isolation for free because every step is a container — and pays for it by requiring a forge and a container runtime.

Walis takes a third route: it limits what a plugin may output rather than where it runs. A plugin returns a shell snippet, which you can read before installing it.

Starting small is not staying small ​

The default is one process and a SQLite file: no database to run, nothing to configure, and the /health endpoint reports clustered: false.

When one node is no longer enough, point Walis at PostgreSQL, MySQL or SQL Server and run several API nodes against the same data. They claim builds atomically and elect a leader by lease for the work that must happen exactly once — cron, offline detection, cleanup and backup. Moving over is a backup and a restore, because the archive is engine-agnostic.

See High availability for what changes and what does not.

Already on Jenkins? ​

Walis reads Jenkins' own files. Paste a Jenkinsfile — declarative or scripted — or a job's config.xml, and it converts stages into steps, parallel into parallel steps, post into run conditions and parameters into build parameters, with a warning list for everything that does not map cleanly. Nothing is written until you review the draft and save it.

Walis has also grown the pieces a Jenkins pipeline usually leans on: build parameters, post-build steps, per-step retries, disableConcurrentBuilds, and downstream job triggers.

See Import from Jenkins for the full mapping table and the honest list of what it cannot convert.

What it is not ​

  • Not a Git host. Point it at a repo with a webhook, or run jobs that have no repo at all.
  • Not a container platform. It runs shell. If you want containers, your script can start them.

Released under the MIT License.