Automatic deployment is super nice way to deliver software. In the past I’ve successfully used Capifony (Symfony-o-centric Capistrano 2.x gem) for deployments. Now as Symfony3 is out with an updated structure, Capifony does not handle it anymore (or a bit of coding sweat is required) – because it’s not maintained anymore. So I’ve decided to stick with it’s ancestor – Capistrano. So lets’ start.
P.S. This is based on Capistrano v3 now.
Tips to Ensure Your Values Unify Your Team, Not Divide It
It was quite a blow-up. Laura and Will each accused the other of violating one of the team’s core values – integrity. They each felt they had honored the value and the other person had disregarded it. People sure get mad when they feel someone has trampled on their values!
Will had promised the client he would send the proposal by the end of the day. It was 4:45 pm and he was waiting for Laura to finish the final edits on the graphics. Laura was conscientiously checking every detail for accuracy making sure that each segment of the pie chart was the exact same size.
At 4:55 pm, Will walked over to Laura’s desk and asked her when she’d be ready. She said she needed 15 more minutes. Will told her to forget it – that he was going to use the earlier version. He walked back to his desk and sent the proposal at 5:00 pm sharp.
And that’s when the blow-up occurred.
Google home device
Looks like Google just promised what we all want – personal assistant that can control it all: your home, your calendar, events, and so much more.
Allo and Duo
Even more, conversations just got much more human alike, including personification
It will be open for developers soon.
Seems like a simple problem, there must be a simple solution? Here are the existing options:
- syslog-ng or rsyslogd logging to a central location.
- Pros: centralized logs, easy to analyse, near to real time
- Cons: Requires extra dedicated server (costs). Have to extend storage or upload to S3 periodically. PITA setup from a security POV unless you know the IP addresses in advance (you can set up your own CA and generate a number of SSL keys and distribute these to the servers on startup and use TLS encrypted communications, but I really CBA with all that hassle – not to mention that last time I checked Amazon Linux didn’t support these serversOOTB so I’d have to install them from a CentOS RPM or similar)
- Message queuing
- (I don’t think this is a perfect match)
- Hadoop cluster
- Pros: awesome data crunching ability
- Cons: we don’t have 10million users yet, I think this is a bit heavy handed (not to mention expensive)
Jenkins is good old CI where you can set up everything from simple cron job to complicated delivery pipeline. At the company where I’m working at the moment we ourselfes built an pretty-damn good Continuous Delivery pipeline which includes:
As I ordered above, tests takes from 30s (unit tests) to around 30 minutes (UAT). When taking in consideration all delivery pipeline action (code deployment, various procedures to be executed and so on) it becomes 45 minutes for a single release. So the math is 8hrs / 45min = up to 10 releases /day. That’s the physical limit. Well we are A-class team (A-for-Agile) so we need more release power.
Docker in Production
Yes! We are running docker in production. Your beloved CodeStory is running in fully Dockerised environment!
Branch name. Same as Local as Origin
Often working on fast-moving projects I find myself creating branches from branches and more. I found one really nice trick to shave couple of seconds and keyboard click. By default when you create new GIT branch locally and try to push that freshly baked branch to your origin, in my entire career I did not have to rename branches, so using the same branch name mades perfect sense. If you are in line with me, there is that magic line below:
git config --global push.default current
git config --global pull.default current
Conditional Step in Your Continuous Delivery Pipeline
Continuous Delivery (CI) often requires something to happen under certain condition. You can have different pipelines, jobs or tasks dedicated to differentiate it, but as far as best practices states – reuse. In my experience of building Delivery Pipelines, it starts with single pipeline for a product, but is often configured to have multiple paths depending on options chosen at the first step.
True at all corners of software development
It’s complicated to make complicated things simple and it’s simple to make complicated things complicated.
This saying can be applied to anything – architecture, design, pattern application and all other complicated things around our complicated world.