Build Engineer (DevOps with C/C++ development, CMake)
Summary
We integrate and innovate the latest engineering, design and technology into DJ, Music Production, Pro Audio, Musical Instrument, and Consumer Electronics products. Our portfolio of revered brands is wide-ranging, and includes: Akai Professional, Alesis, Alto Professional, Denon DJ, Denon Professional, ION Audio, Marantz Professional, M-Audio, MixMeister, Moog, Rane, Numark, and Sonivox.
Who We Need:
We’re looking for an autonomous, collaborative, sensible, organised and pragmatic Build Engineer. Our dream candidate ‘cares about solving our problems’, has ‘experience in build management, build tools, and leading investigation and feasibility studies’.
What You'll Do:
Our Build Engineer is responsible for maintaining build systems for all inMusic projects. We report directly to the Director of Software Development. Our Build Engineers have background knowledge on all relevant technology used by inMusic and are experts in build systems, Continuous Integration (CI) systems, and automated product deployment processes. They maintain a system for the health of the codebase using relevant tools, metrics, and alerts. You will maintain deployment and release processes for products. You will maintain and admin CI systems while keeping code in version control and other development tools maintained.
- Scale and maintain existing build, CI, and deployment systems so that working, current builds of inMusic software are available for those who need them, and progress through development is not halted by broken builds. Build systems include:
- Maintain a stable configuration for the CI and the pipeline to guarantee the quality of the build, performance, and project quality on all projects.
- Start with finding places in the CI and deployment system that are ripe for refinement and improvement so we can get better at building, packaging and publishing things.
- Analyse and set up new build systems; build and implement new software-build, test and delivery tooling.
- In that light, we can support the development teams, from building Release Candidate builds to helping in tracking and fixing issues.
- Make it as fast, as effortless and seamless as we can for all our teams if we build, package, publish.
- Research and propose guidelines on how to keep code of quality, such as the development of code metrics, practices to do code reviews, measuring coverage and the usage of static and dynamic analysis.
Requirements
Technical requirements:
Knowledge of industrial-strength software engineering practices for the complete software development lifecycle including concept, initiation, planning, requirements analysis, development, testing, deployment, support, and maintenance.
- Deep understanding of build systems.
- Demonstrable experience in CMake for medium to large C/C++ projects.
- Familiarity with development for macOS, Windows and Linux
- Jenkins administration and project setup, including Jenkins pipeline configuration.
- Experience working with large codebases across multiple platforms.
- Windows/Linux shell scripting and use of scripting languages (e.g., Python, JavaScript, Lua).
- Linux system administration.
- Good working knowledge of version control systems (including git and svn).
- Understanding of GNU Make.
- Ability to work in our Cambridge office (as required) to administer build machines.
Nice to have:
- Experience of test automation in a CI context.
- Experience of working in agile development environment.
- Yocto or Buildroot expertise.
- Gitlab integration experience.
- Creating packages for package management systems (e.g., Conan).
- Familiarity with Electron, JavaScript.
- Building and using Docker containers.
- Familiarity with Jira and Confluence.
- Experience supporting a multi-site development organisation.
- Experience with evaluating and integrating open source and in-house developed toolsets.
- Familiarity with integration of static and dynamic code-coverage tools.
- Ansible knowledge.
Characteristics:
- Ability to communicate with people from different teams beyond their own.
- Willingness to work collaboratively across multiple disciplines.
- Ability to give and receive constructive feedback in order to strive for continuous improvement.
- Good at managing competing demands for your time.
Qualifications:
- Bachelor’s Degree in Computer Science or related technical field.
- 2+ years relevant work experience