From a518fd5e374dc6406b36dc8c148811a350951f39 Mon Sep 17 00:00:00 2001 From: Thomas Feathers Date: Wed, 23 Aug 2023 12:17:20 +0100 Subject: [PATCH 1/4] Added blog about cron generator --- .../images/cron ui.png | Bin 0 -> 44757 bytes .../posts/2023-08-cron-generator-gem/index.md | 245 ++++++++++++++++++ 2 files changed, 245 insertions(+) create mode 100644 content/posts/2023-08-cron-generator-gem/images/cron ui.png create mode 100644 content/posts/2023-08-cron-generator-gem/index.md diff --git a/content/posts/2023-08-cron-generator-gem/images/cron ui.png b/content/posts/2023-08-cron-generator-gem/images/cron ui.png new file mode 100644 index 0000000000000000000000000000000000000000..27ff481160f56854a3617f58a399bb315cec2abf GIT binary patch literal 44757 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 Date: Thu, 24 Aug 2023 11:38:22 +0100 Subject: [PATCH 2/4] Updated some grammatical errors. Minor changes --- .../posts/2023-08-cron-generator-gem/index.md | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/content/posts/2023-08-cron-generator-gem/index.md b/content/posts/2023-08-cron-generator-gem/index.md index 0b27ec76..950ac96c 100644 --- a/content/posts/2023-08-cron-generator-gem/index.md +++ b/content/posts/2023-08-cron-generator-gem/index.md @@ -15,7 +15,9 @@ This gem is currently only available to DVLA employees with a view to go open so ## How it started -I was setting up cron jobs in Drone for the CI/CD pipeline on the Application TYR project. +I was setting up cron jobs in Drone for the CI/CD pipeline on the Application TYR project. We needed to stagger build times to ease pressure on +the CI/CD infrastructure. + I found the UI in Drone to be rather restrictive regarding the schedules you could set for a cron job. The Drone UI: @@ -26,7 +28,7 @@ This is restrictive if you want to run every 15 minutes or something obscure lik ## The Drone cli -Drone does have a cli that allows you adjust the cron schedule down to these granular details but the syntax isn't the most readable. +Drone does have a cli that allows you to adjust the cron schedule down to these granular details but the syntax isn't the most readable. It's easy to forget (_at least for me_) what to enter where if you're not using it regularly. Example of a schedule to pass in to the cli for running 25 minutes passed the hour, between the hours of 7am and 5pm. @@ -40,9 +42,9 @@ which * represents which part of the schedule. ## Dronicron - The Cron Generator -I know, epic name! +I know, epic name, right!? -I started to create a cron generator of my own that can use the Drone cli to do my bidding. Dronicron is the result of that crusade. +I decided to see if I could create a cron generator of my own that can use the Drone cli to do my bidding. Dronicron is the result of that crusade. It has several uses which are: @@ -111,9 +113,9 @@ Usage: generate ## Generate -Caveat: this gem does a lot so you can see the full readme for it [HERE](https://bitbucket.tooling.dvla.gov.uk/projects/QE/repos/cron-generator/browse/README.md) +Caveat: this gem does A LOT so you can see the full readme for it [HERE](https://bitbucket.tooling.dvla.gov.uk/projects/QE/repos/cron-generator/browse/README.md) -Generate (or g for short) will allow you generate a Drone cli command that you can run yourself after exporting your Drone credentials (drone token and drone server). +`generate` (or `g` for short) will allow you generate a Drone cli command that you can run yourself after exporting your Drone credentials (drone token and drone server). This command has several options that can be passed in, such as: @@ -166,7 +168,7 @@ You set the values with = or : as delimiters: Run the job between 7am and 5pm. ```shell - dronircon generate -r "my_repo" -n "hourly-cron" --addargs "hours:6-16" + dronircon generate -r "my_repo" -n "hourly-cron" --addargs "hours:7-17" ``` @@ -232,14 +234,15 @@ Your schedule is: 0 12 7-17 * * * ``` -That's literally all there is the schedule option! +That's literally all there is to the schedule option! ## Installation -If you choose to use or check out the gem, it's currently stored in Nexus. +This was just a personal project but if you choose to use or check out the gem, it's currently stored in Nexus. Add the gem `cron-generator` to your Gemfile under the nexus gem group or you can install it manually using `gem install cron-generator -s path_to_gem_group+private` ## Summary -I find this cli helpful to both learn about Drone cli schedules and simplify the process of creating a new cron job. \ No newline at end of file +I enjoyed writing this gem. It has definitely broadened my understanding of cron scheduling with Drone. +It has (for me) simplified cron scheduling. Maybe it can for you, too. From 03fc8944ea220f5cfe31d798699d36fcbe50842b Mon Sep 17 00:00:00 2001 From: Thomas Feathers Date: Thu, 24 Aug 2023 14:28:23 +0100 Subject: [PATCH 3/4] Fixed typos --- content/posts/2023-08-cron-generator-gem/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/posts/2023-08-cron-generator-gem/index.md b/content/posts/2023-08-cron-generator-gem/index.md index 950ac96c..8c7139d9 100644 --- a/content/posts/2023-08-cron-generator-gem/index.md +++ b/content/posts/2023-08-cron-generator-gem/index.md @@ -168,21 +168,21 @@ You set the values with = or : as delimiters: Run the job between 7am and 5pm. ```shell - dronircon generate -r "my_repo" -n "hourly-cron" --addargs "hours:7-17" + dronicron generate -r "my_repo" -n "hourly-cron" --addargs "hours:7-17" ``` Set the schedule the run Sun-Fri every week. ```shell - dronircon g -r "my_repo" -n "hourly-cron" -a "week_days:0-5" + dronicron g -r "my_repo" -n "hourly-cron" -a "week_days:0-5" ``` Let's mix them to go really insane on it. This would run January-March, Monday-Friday, 8am-6pm, half passed every hour. ```shell - dronircon g -r "my_repo" -n "hourly-cron" --addargs "months:1-3 week_days:1-5" hours:8-18 minutes:30" + dronicron g -r "my_repo" -n "hourly-cron" --addargs "months:1-3 week_days:1-5" hours:8-18 minutes:30" ``` The last example is silly but shows how flexible your schedule can be depending on your project's needs. There is validation written into these ranges to match what Drone allows. From 4de6744eb2dd86e7c9d3fb5fc37c385d3a049220 Mon Sep 17 00:00:00 2001 From: Thomas Feathers Date: Thu, 24 Aug 2023 14:29:45 +0100 Subject: [PATCH 4/4] Fixed another typo --- content/posts/2023-08-cron-generator-gem/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/posts/2023-08-cron-generator-gem/index.md b/content/posts/2023-08-cron-generator-gem/index.md index 8c7139d9..3a07cc1d 100644 --- a/content/posts/2023-08-cron-generator-gem/index.md +++ b/content/posts/2023-08-cron-generator-gem/index.md @@ -182,7 +182,7 @@ Set the schedule the run Sun-Fri every week. Let's mix them to go really insane on it. This would run January-March, Monday-Friday, 8am-6pm, half passed every hour. ```shell - dronicron g -r "my_repo" -n "hourly-cron" --addargs "months:1-3 week_days:1-5" hours:8-18 minutes:30" + dronicron g -r "my_repo" -n "hourly-cron" --addargs "months:1-3 week_days:1-5 hours:8-18 minutes:30" ``` The last example is silly but shows how flexible your schedule can be depending on your project's needs. There is validation written into these ranges to match what Drone allows.