快速、简单的服务器测试/验证
**
Note: For testing containers see the dgoss wrapper. Also, user submitted wrapper scripts for Kubernetes kgoss and Docker Compose dcgoss.
Note: For some Docker/Kubernetes healthcheck, health endpoint, and container ordering examples, see my blog post.
Goss is a YAML based serverspec alternative tool for validating a server's configuration. It eases the process of writing tests by allowing the user to generate tests from the current system state. Once the test suite is written they can be executed, waited-on, or served as a health endpoint.
Note: For macOS and Windows, see: platform-feature-parity.
This will install goss and dgoss.
Note: Using curl | sh is not recommended for production systems, use manual installation below.
# Install latest version to /usr/local/bin
curl -fsSL https://goss.rocks/install | sh
# Install v0.4.10 version to ~/bin
curl -fsSL https://goss.rocks/install | GOSS_VER=v0.4.10 GOSS_DST=~/bin sh
!!! warning
If you're using goss in a CI pipeline, it's recommended that you don't
download the `latest` and instead use a specific release tag. Using the
latest release may lead to unexpected behaviour.
# See https://github.com/goss-org/goss/releases for release versions
VERSION=v0.4.10
curl -L "https://github.com/goss-org/goss/releases/download/${VERSION}/goss_${VERSION#v}_linux_x86_64.tar.gz" | tar xz -C /usr/local/bin goss
chmod +rx /usr/local/bin/goss
# (optional) dgoss docker wrapper (use 'master' for latest version)
VERSION=v0.4.10
curl -L "https://github.com/goss-org/goss/releases/download/${VERSION}/dgoss" -o /usr/local/bin/dgoss
chmod +rx /usr/local/bin/dgoss
make build
Alternatively, you can build it with goreleaser. To
build a binary, use gorelease build, and to only build for the same OS and
architecture as the machine you're building on, include the --single-target
flag. The --clean flag will clean up any existing builds, and --snapshot
will allow you to build against something other than a tag.
Here's an example:
…
Using the Goss container image
An initial set of tests can be derived from the system state by using the add or autoadd commands.
Let's write a simple sshd test using autoadd.
# Running it as root will allow it to also detect ports
$ sudo goss autoadd sshd
Generated goss.yaml:
port:
tcp:22:
listening: true
ip:
- 0.0.0.0
tcp6:22:
listening: true
ip:
- '::'
service:
sshd:
enabled: true
running: true
user:
sshd:
exists: true
uid: 74
gid: 74
groups:
- sshd
home: /var/empty/sshd
shell: /sbin/nologin
group:
sshd:
exists: true
gid: 74
process:
sshd:
running: true
Now that we have a test suite, we can:
$ goss validate
...............
Total Duration: 0.021s # <- yeah, it's that fast..
Count: 15, Failed: 0
goss --vars vars.yaml validate
goss validate --retry-timeout 30s --sleep 1s
$ goss serve &
$ curl localhost:8080/healthz
# JSON endpoint
$ goss serve --format json &
$ curl localhost:8080/healthz
# rspecish response via content negotiation
$ goss serve --format json &
$ curl -H "Accept: application/vnd.goss-rspecish" localhost:8080/healthz
Goss files can be manually edited to improve readability and expressiveness of tests.
A Json draft 7 schema available at https://goss.readthedocs.io/en/stable/schema.yaml makes it easier to edit simple goss.yaml files in IDEs, providing usual coding assistance such as inline documentation, completion and static analysis. See #793 for screenshots.
For example, to configure the Json schema in JetBrains intellij IDEA, follow documented instructions, with arguments such as:
schema url=https://goss.readthedocs.io/en/stable/schema.yamlschema version=Json schema version 7file path pattern=*/goss.yamlIn addition, Goss files can also be further manually edited (without yet full json support) to use:
title and meta (arbitrary data) attributes are persisted when adding other resources with goss addSome examples:
…
Goss.yaml files with templates can still be validated through the Json schema after being rendered
using the goss render command. See example below
…
JSON Schema maintains a table of validators.
goss works well on Linux, but support on Windows & macOS is alpha. See platform-feature-parity.
The following tests have limitations.
Package:
Service:
暂无开放 Issues,或尚未同步最近议题。