COSC2759-2110 Assignment 1 specifications
Deadline
% allocated to this assignment To be submitted via
To be attempted
Please read this first
Sunday 11.04.2021 (11:59 pm AEST)
30
Canvas Individually
All of us have been affected by the unfortunate COVID-19 scenario and its aftermath. It is often hard to concentrate and study online; but as a student enrolled in this course, it is your responsibility to regularly attend online lecture, your respective pracs and consultation session(s).
• Bring your questions to online discussion board, consultation sessions or email Homy (amirhomayoon.ashrafzadeh@rmit.edu.au).
• Watch the online recordings on a regular basis if you cannot attend the live sessions.
• Do NOT start the assignment at the last minute.
• Do NOT ask for last minute extensions, these are often rejected. Extensions can only be granted for personal and medical reasons, provided you can supply some evidence.
Besides, DevOps is a very important skill to have. There is a clear lack of training in this area for the graduates and as such doing well in this course will give you a competitive edge over graduates from other universities.
Finally, please do NOT give up on this semester thinking of online study as a waste of time. Global industry projects involving teams at geographically different locations often run fully online. Think of this semester as a training for future. In the fast-evolving CS&IT industry, the online medium is very popular and vastly used.
You have more than 4 weeks to complete this assignment. It is
related to AWS. You will need your AWS Educate accounts.
If there are any issues with your AWS Educate account, please email the head tutor at your earliest. Sending emails late or closer to deadline re account issues will only lead to adverse outcomes.
Get started!
1
Scenario
Stonks Inc has recently built a web application that allows users to register and create a simple todo list. The application is built using NodeJs, Express and backed by a NoSQL MongoDB.
The source code for this application is stored in GitHub but the code itself is built and deployed manually from the lead developers (Pete) laptop. Although this process has worked in the past, unfortunately Pete had recently returned positive with Coronavirus and had to take some unexpected sick leave from work and meant that Stonks Inc missed a critical release that contained a new feature that one of their largest clients have been waiting on for quite some time.
To top this off, there have also been instances where bugs have been introduced into production which has caused an increase in the number of support calls from their customers, and the support and development teams have had to work overtime to manage the load and fix the issues.
These issues are causing a reduced morale with the teams, as well as impacting the revenue of Stonks Inc. As the newly hired DevOps practitioner, the org has turned to you to help resolve their issues and enable their teams to better deliver new features and ensure releases into production are quick and reliable.
To help kick off this transformation, you have proposed that Stonks Inc start looking at establishing a CI pipeline to help reduce dependency on Pete by introducing automated builds and automate their testing processes. This will reduce the strain on the QA team and ensure bugs and development defects are picked up quickly and fed back to developers to be resolved before any changes are promoted to production.
The Approach
To make this easier for Stonks Inc., which is rather immature with DevOps methodologies and practices, you have opted to use SaaS tools where possible to help reduce the learning curve for their development team. You will follow best practice principles and make as much of your solution using code, this includes your CI build configuration and scaffolding scripts.
Tools to use:
● GitHub (We will be using GitHub Classroom)
● CircleCI
● Docker
● Docker Compose
Stonks Inc expects you update your Github classroom repository all the code and documentation required to run the Continuous Integration build you are creating for them. This includes all the files.
2
Deliverable
We will be using Github classroom to edit and manage the code base. All of the core files for the application will be provided to you here. Please accept the invite below to join the classroom and get access to Assignment #1. You will be expected to work from this repo and make all of your commits to this repo.
Create Github Classroom for the assignment
Please accept this invitation, (you must login with your Github account).
You will see above picture after you accept the invitation, wait until the process is done.
Then you must be able to see the below page. You can see your repository for you on SDO Github classroom. Please click on that and then (The URL in here is as an example and your Github URL must be as below:
“https://github.com/RMIT-SDO/assignment-1-student-
3
you must be able to see your Github repository as below (pictures are as examples your URL can be different):
Please be advised that you are only allowed to use this repository for the assignment. Your scaffold with a folder structure and some support files is available in your Github repository.
Please use your AWS Educate account to test the solution as you build it.
4
For all queries pertaining to this assignment, be it specification-related or extension, ONLY send email to Homy and no one else.
Tasks
Pass
It will be important that you document each of the elements in your solution and explain not only what it does, but the intent behind it, so the Stonks Inc. team can understand why you chose to approach it the way you did. [20%]
Please consider:
● Analysis of the problem (What are you actually trying to solve) ( 5%)
● Explain and Justify the solution (How does the solution work) (10%)
● Writing quality, layout and accuracy (5%)
This should all be documented in the Readme of git Repo. —————————————————————————————————————————
Set up integration between CircleCI & the Github repo that is provided to you via GitHub Classroom [5%] —————————————————————————————————————————
Things that needs to be added to your Continuous Integration build [24%]
• Unit testing (5%)
• Static Code Analysis / Lint (5%)
• Ensure code coverage is checked (Hint: Research how you enable code coverage with Jest) (4%) • Implement a failure scenario (5%)
• Generating an artefact that can be deployed (4%) —————————————————————————————————————————
Ensure proper branching is implemented (GitHub Flow is recommended) and new features are developed on feature branches and merged into master with Pull Requests. Pull requests can be reviewed and approved by yourself.
[5%]
5
Credit
If you can finish all the above tasks, then you can start working on C tasks.
Ensure the pipeline works with multiple branches and have your CI builds trigger on every branch & ensure artefacts are ONLY generated on the master branch. [10%]
Distinction
If you can finish all the above tasks, then you can start working on D tasks.
Run integration testing as part of the pipeline
Have the CI Pipeline ensure automated tests validate that the application integrates properly with the MongoDB Backend. You should be leveraging docker to stand up a containerised version of the DB and run tests against it. Integration tests are written in Jest and details on how to run these are included in the project ReadMe.
If the tests fail, break the build and report back why it failed in the log.[10%]
High Distinction
If you can finish all the above tasks, then you can start working on HD tasks.
No help or consultation will be provided for these tasks. You are welcome to ask general questions regarding the tasks, but this is a strictly self-research section
Run end-to-end tests as part of the pipeline :
End-to-end testing is a test that checks if the flow of an application from start to finish is behaving as expected. The purpose of performing end-to-end testing is to find system dependencies and to ensure that the data integrity is maintained between various system components and systems. Please read the ReadMe file on the project.
Execute automated tests that validate that the application functions as expected from the user interface.
If the tests fail, break the build and report back why it failed in the log. [20%]
6
Assessment criteria
You will be assessed on:
• Your ability to automate the deployment of the AWS infrastructure using Terraform.
• Your ability to deploy the application and configure it automatically using Ansible
• Your ability to document and explain the solution so the scripts provided can be executed by
someone with no prior context
• How well you analyse the problem and justify your solution for each task
• Does the provided Zip file contain everything required for ACME corp to be able to use the
deployment you have designed?
• Do you use the branching and commit changes often?
PLAGIARISM:
All assignments will be checked with plagiarism-detection software; any student found to have plagiarised would be subject to disciplinary action. Plagiarism includes:
• CONTRACT CHEATING: paying someone to do your work
• CONTRACT CHEATING: getting someone else to write the test or attend demo • submitting work that is not your own or submitting text that is not your own • copying work from/of previous/current semester students
• allowing others to copy your work via email, printouts, social media etc.
• posting assignment questions (in full or partial) on external technical forums • sending or passing your work to your friends
• posting assignment questions on technical forums to get themsolved
A disciplinary action can lead to
• a meeting with the disciplinary committee
• a score of zero for the assignment
• a permanent record of copying in your personal university records and/or • expulsion from the university, in some severe cases
All plagiarism will be penalised. There are no exceptions and no excuses. You have been warned. For more details please read RMIT’s page on Academic Integrity at
https://www.rmit.edu.au/students/student-essentials/assessment-and-exams/academic-integrity
7
Submission Procedure
Each submission must include a README.txt file containing your full name, Student ID and any other relevant information (if you are working in a group, then please mention the details of your partner).
ACME corp. expects you push all the code and documentation required to run the Continuous Integration build you are creating for them into your Github classroom repository. This includes the files that define any shell scripts, Docker files, or anything else you use.
Late submissions and Extension-related information
A penalty of 10% per day of the total marks for each assignment will apply for each day a submission is late, including both weekdays and the weekend. After 5 days, you will receive zero marks for that assignment.
Email your head tutor, Homy: (amirhomayoon.ashrafzadeh@rmit.edu.au) for extension related queries.
Please submit ONLY the URL of your GitHub Classroom repository into Canvas, your repository must have a format like below:
https://github.com/RMIT-SDO/assignment-1-student-
8