  The constant changes in the software industry, practices, and methodologies
impose challenges to teaching and learning current software engineering
concepts and skills. DevOps is particularly challenging because it covers
technical concepts, such as pipeline automation, and non-technical ones, such
as team roles and project management. The present study investigates a course
setup to introduce these concepts to software engineering undergraduates. We
designed the course by employing coding to associate DevOps concepts to Agile,
Lean, and Open source practices and tools. We present the main aspects of this
project-oriented DevOps course, with 240 students enrolled in it since its
first offering in 2016. We conducted an empirical study, with both a
quantitative and qualitative analysis, to evaluate this project-oriented course
setup. We collected the data from the projects repository and students
perceptions from a questionnaire. We mined 148 repositories (corresponding to
72 projects) and obtained 86 valid responses to the questionnaire. We also
mapped the concepts which are more challenging to students learn from
experience. The results evidence that first-hand experience facilitates the
comprehension of DevOps concepts and enriches classes discussions. We present a
set of lessons learned, which may help professors better design and conduct
project-oriented courses to cover DevOps concepts.
