Alin.io
Search
K
Links

Webhooks

Handle Container Image "push" events from outside of Alin.io
Sometimes you need an integration between services, and most of the Container CI, CD, or Infrastructure environments expect to receive an HTTP request with the data of the container "push" event to trigger an action to pull a new container image or do something else. One of the best examples is GitHub Actions, or Jenkins, where they expect to receive an HTTP Post request (or you can configure them) to trigger a new CI/CD pipeline to run your tests inside a newly pushed container and deploy a new version to Kubernetes production.

Setting Webhook

For better customizability at Alin.io, we can set your WebHook URL for each repository individually. It is inside a Repository settings page, and putting it is as easy as just typing a Webhook endpoint URL there, and it has to be a valid URL. Otherwise, our system will start ignoring it over time when it will fail requests a few times in a row.
Individual Repository -> Settings page

JSON Payload

External integrated service should expect to receive an HTTP/S POST request with a JSON body and some extra headers to identify the request. You can also provide URL query parameters to pass a token to your integrated service if you need to ensure only Alin.io can send an HTTP request to a given URL.
User-Agent: Alin.io WebHook Handler
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
x-alin-webhook: <username>/<repository>:<tag>
Content-Length: <size of JSON payload>
Content-Type: application/json
JSON Body is not customizable, but it could be over time if there is a real need for that.
{
"image": "repo.alin.io/<username>/<repository>:<tag>",
"image_size": <pushed image size>,
"layers": [<pushed image layers>],
"repository": "repo.alin.io/<username>/<repository>",
"repository_size": <repository size>,
"event": "push,"
"timestamp": <ISO formatted time of the request>
}

Final Notes

Our Webhook service sends a request asynchronously, which means that if you make a docker push, it might take a few seconds to trigger a Webhook operation. That's because we want to keep an integrated service manageable with a blast of HTTP requests, so we batch them.