-
Notifications
You must be signed in to change notification settings - Fork 0
/
feed.xml
81 lines (67 loc) · 5.23 KB
/
feed.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Blog Name</title>
<subtitle>Blog subtitle</subtitle>
<id>http://blog.url.com/</id>
<link href="http://blog.url.com/"/>
<link href="http://blog.url.com/feed.xml" rel="self"/>
<updated>2020-04-22T02:00:00+02:00</updated>
<author>
<name>Blog Author</name>
</author>
<entry>
<title>Validate Your YAML Files</title>
<link rel="alternate" href="http://blog.url.com/2020/04/22/validate-your-yaml-files/"/>
<id>http://blog.url.com/2020/04/22/validate-your-yaml-files/</id>
<published>2020-04-22T02:00:00+02:00</published>
<updated>2023-04-27T07:25:40+02:00</updated>
<author>
<name>Article Author</name>
</author>
<content type="html"><p>A few months ago, a client project we&rsquo;re working on started using
<a href="https://github.com/Moove-it/sidekiq-scheduler">sidekiq-scheduler</a> for handling
scheduled jobs. The tool works well and we started migrating more and more Cron
jobs to Sidekiq.</p>
<p>A few days ago, after deploying a new set of jobs, we scheduled a few of them to
test if everything works in production. But, we realized that no jobs were being
logged in the Sidekiq log file. Since Sidekiq is managed by systemd, we
inspected the status of the service with <code>systemctl</code> and <code>journalctl</code> and found
out that <code>sidekiq.yml</code> file is not a valid YAML file. That prevented Sidekiq
from booting.</p>
<p>This raised 2 important questions:</p>
<ul>
<li>How can we prevent deploying an invalid <code>sidekiq.yml</code> file to the server?</li>
<li>How can we receive a notification when the Sidekiq service fails to start?</li>
</ul>
<p>As the first line of defence, we decided to implement a simple script to check
if <code>sidekiq.yml</code> is a valid YAML file and to run the script as part of our
Continuous Integration pipeline.</p>
<p>After a few minutes, we had a working version of the script:</p>
<div class="not-prose my-5"><div class="highlight"><pre class="highlight ruby"><code><span class="c1">#!/usr/bin/env ruby</span>
<span class="nb">require</span> <span class="s2">"yaml"</span>
<span class="n">sidekiq_yml</span> <span class="o">=</span> <span class="no">File</span><span class="p">.</span><span class="nf">open</span><span class="p">(</span><span class="s2">"config/sidekiq.yml"</span><span class="p">)</span>
<span class="k">begin</span>
<span class="no">YAML</span><span class="p">.</span><span class="nf">load</span><span class="p">(</span><span class="n">sidekiq_yml</span><span class="p">)</span>
<span class="nb">puts</span> <span class="s2">"sidekiq.yml is valid"</span>
<span class="k">rescue</span> <span class="o">=&gt;</span> <span class="n">ex</span>
<span class="nb">puts</span> <span class="s2">"sidekiq.yml is not valid"</span>
<span class="nb">puts</span> <span class="s2">"Error: </span><span class="si">#{</span><span class="n">ex</span><span class="p">.</span><span class="nf">message</span><span class="si">}</span><span class="s2">"</span>
<span class="nb">exit</span> <span class="mi">1</span>
<span class="k">end</span>
</code></pre></div></div>
<p>The script works fine, but the name of the YAML file is hard-coded and is a bit
verbose. The second version is a Ruby one-liner that&rsquo;s executed from a console:</p>
<div class="not-prose my-5"><div class="highlight"><pre class="highlight ruby"><code><span class="n">ruby</span> <span class="o">-</span><span class="n">e</span> <span class="s2">"require 'yaml'; YAML.load(</span><span class="se">\$</span><span class="s2">stdin.read);"</span> <span class="o">&lt;</span> <span class="n">sidekiq</span><span class="p">.</span><span class="nf">yml</span>
</code></pre></div></div>
<p>This simple one-liner doesn&rsquo;t solve all problems. It&rsquo;s still possible to deploy
a file that contains a configuration that&rsquo;s not valid for a library or a
service. In some cases, the library might validate the configuration. In others
you might want to do that yourself. We&rsquo;re still working on a good solution for
that problem. For now, the smoke test one-liner within a CI pipeline will do the
trick.</p>
<p>What&rsquo;s your solution for validating YAML files and other configuration?</p>
<p>Thanks to <a href="mailto:vladimir@vladimirsaric.com">Vladimir Saric</a> for reviewing the
blog post.</p>
</content>
</entry>
</feed>