Give your own UUID, do a simple POST to get an incremental number.
It's easy to generate a random one and use the UUID as a key in below demos.
curl -i -H "Content-Type: application/json" -X POST https://buildnumber1.herokuapp.com/e9461f1c-ef78-4162-bcb7-e83da7287614
for i in {1..10}; do curl -i -H "Content-Type: application/json" -X POST https://buildnumber1.herokuapp.com/e9461f1c-ef78-4162-bcb7-e83da7287614; done
This demo runs on a heroku free dyno. The first POST may take 10 seconds for the dyno to start up.
As the free dyno will be released after 30 minutes idle, the demo data won't persist.
The initial purpose of this project is to provide a Jenkins "build number" service.
There are some sets of similar Jenkins tasks, but they are setup in different jobs, or even different Jenkins masters.
For example, an open job for everyone and another restrited job for leaders, we could use a consistent incremental build number as part of the release binary version, if they are building same project.
It could be used in various scenarios where you need an incremental number.
Request
POST /{uuid} HTTP/1.0
Parameters:
uuid, example e9461f1c-ef78-4162-bcb7-e83da7287614
Response
Content-Type: application/json; charset=UTF-8
{"bn":5}
uuid must be in UUID format.
The value is persisted by a file named as {uuid} in folder STORAGE_DIR.
The default STORAGE_DIR is "data". It could be overridden by environment variable.
The first POST for a new uuid will get 1, futher POSTs to same uuid get 2,3,4,5...
Concurrent requests to same UUID get protected by lock.
go get github.com/google/uuid
go get github.com/gorilla/mux
go install buildnumber
bin/buildnumber
docker build -t buildnumber .
docker pull baibai/buildnumber
docker-compose up -d
In docker-compose.yml, it maps a volume to /data and use as STORAGE_DIR
curl -i -H "Content-Type: application/json" -X POST http://127.0.0.1:8080/e9461f1c-ef78-4162-bcb7-e83da7287614
Copy env.sample as .env, then set proper domain name in .env
docker-compose -f docker-compose-traefik.yml up -d
curl -i -H "Content-Type: application/json" -X POST https://example.com/buildnumber/e9461f1c-ef78-4162-bcb7-e83da7287614
go get github.com/tsenart/vegeta
echo "POST https://example.com/buildnumber/e9461f1c-ef78-4162-bcb7-e83da7287614" | vegeta attack -duration=5s -rate=200 | tee results.bin | vegeta report
Modify the volumeClaimTemplates to match what the cluster has. This example uses rook-ceph.
kubectl apply -f buildnumber.yml
Add Ingress if necessary. The example uses traefik. Be sure to modify the DOMAIN part.
kubectl apply -f buildnumber-ingress.yml
curl -i -H "Content-Type: application/json" -X POST https://buildnumber.example.com/e9461f1c-ef78-4162-bcb7-e83da7287614