|Software Development Infrastructure|
PrefaceDuring the past few years, many tools came to software development environment. These days you can automate many processes to make free time for yourself. I want to share my story about improving the development infrastructure in my work.
Why did I start?Before 2016, we use only Git for version controlling and Redmine for issue tracking. I had some shell scripts to do some jobs such as making release and deploying to servers. I knew there were many tools for running these scripts automatically but they were some problems:
- Nobody was responsible for preparing development infrastructure.
- I didn’t have any free time to create development infrastructure (I know it's not an excuse!).
- Nobody knew the real benefits of development infrastructure (in our company).
- The cloud development infrastructures are not available from Iran or for Iranians.
What did I choose?I’ve researched and chose the following software to build a basic development infrastructure:
- Redmine (for issue tracking and workflows)
- Jenkins (for running tests and automating builds)
- Git (As version control system)
- SonarQube (for code quality)
- Artifactory (for dependencies)
- Active Directory, LDAP (for centralizing managing users)
Integrated InfrastructureI’ve integrated all software with AD to make managing users easier. Now, we can create a user and set roles (e.g. sudoers, developer) very quickly.
Also, I’ve integrated other software:
- Git to Redmine and Jenkins
- Redmine to Jenkins (and vice verse)
- Jenkins to Artifactory (After building a package successfully, it will be deployed to Artifactory automatically)
- Jenkins to SonarQube (Check code quality to make a build successful or failure)
What did happen after new infrastructureAfter running the new infrastructure, we've got many benefits from it. I couldn't imagine how useful that is.
- The pace of development was increased and so we were agiler.
- Now we have complete continuous integration and continuous delivery cycles.
- Jenkins deploys latest production and development versions to servers.
- Jenkins installs jar files, java source code and java docs of our java modules to Artifactory. So, developers could get jar libraries easily and see modules source code inside IntelliJ IDEA.
- SonarQube checks code quality and makes a build failure if there wasn't unit test or code quality was bad.
- The administrator could create, edit or delete a user of the whole infrastructure just by some clicks.
- Artifactory download and cache all dependencies. So, we save the bandwidth and download them from the local maven repository.
All these advantages help us to save time, improve code qualities and maintain the software easier.
There is only one thing that I regret is postponing of building development infrastructure. If you still using old ways to test, build and deploy, you are doing it wrong. Put building development infrastructure at the top of your to-do list. Don't wait for free time, make your time free by building a development infrastructure.