This detects when it is running as pid 1, and becomes an init process. Specifically this means handling SIGCHLD and reaping processes (otherwise they become zombies) and forwarding signals to "real" process. We fork and re-exec ourselves so that we only get *this* SIGCHLD for orphaned processes (re-parented to 1) and not the real events from running things like git or ssh. |
||
|---|---|---|
| build | ||
| cmd/git-sync | ||
| demo | ||
| docs | ||
| pkg | ||
| vendor | ||
| .gitignore | ||
| CONTRIBUTING.md | ||
| Dockerfile.in | ||
| LICENSE | ||
| Makefile | ||
| OWNERS | ||
| README.md | ||
| RELEASING.md | ||
| SECURITY_CONTACTS | ||
| code-of-conduct.md | ||
| go.mod | ||
| go.sum | ||
| slow_git.sh | ||
| test_e2e.sh | ||
README.md
git-sync
git-sync is a simple command that pulls a git repository into a local directory. It is a perfect "sidecar" container in Kubernetes - it can periodically pull files down from a repository so that an application can consume them.
git-sync can pull one time, or on a regular interval. It can pull from the HEAD
of a branch, or from a git tag, or from a specific git hash. It will only
re-pull if the target of the run has changed in the upstream repository. When
it re-pulls, it updates the destination directory atomically. In order to do
this, it uses a git worktree in a subdirectory of the --root and flips a
symlink.
git-sync can also be configured to make webhook call upon sucessful git repo syncronisation. The call is made when right after the symlink is updated.
Usage
# build the container
make container REGISTRY=registry VERSION=tag
# build the container behind a proxy
make container REGISTRY=registry VERSION=tag HTTP_PROXY=http://<proxy_address>:<proxy_port> HTTPS_PROXY=https://<proxy_address>:<proxy_port>
# run the container
docker run -d \
-v /tmp/git-data:/tmp/git \
registry/git-sync:tag \
--repo=https://github.com/kubernetes/git-sync
--branch=master
--wait=30
# run an nginx container to serve the content
docker run -d \
-p 8080:80 \
-v /tmp/git-data:/usr/share/nginx/html \
nginx
Webhooks
Webhooks are executed asynchronously from the main git-sync process. If a webhook-url is configured,
when a change occurs to the local git checkout a call is sent using the method defined in webhook-method
(default to POST). git-sync will continually attempt this webhook call until it succeeds (based on webhook-success-status).
If unsuccessful, git-sync will wait webhook-backoff (default 3s) before re-attempting the webhook call.
Usage
A webhook is configured using a set of CLI flags. At its most basic only webhook-url needs to be set.
docker run -d \
-v /tmp/git-data:/git \
registry/git-sync:tag \
--repo=https://github.com/kubernetes/git-sync
--branch=master
--wait=30
--webhook-url="http://localhost:9090/-/reload"