Modify the structure of README.md
Instead of having exercises in their own separate section, they are now part of the main topics sections. This should make the learning process easier to follow where users have both exercises and questions in the same place. In addition, added a couple of new questions & exercises and modified existing scripts accordingly.
This commit is contained in:
parent
dfbe979872
commit
e54648d47f
194
README.md
194
README.md
@ -2,7 +2,7 @@
|
||||
|
||||
:information_source: This repo contains questions and exercises on various technical topics, sometimes related to DevOps and SRE :)
|
||||
|
||||
:bar_chart: There are currently **1600** questions
|
||||
:bar_chart: There are currently **1571** questions
|
||||
|
||||
:books: To learn more about DevOps and SRE, check the resources in [devops-resources](https://github.com/bregman-arie/devops-resources) repository
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
<td align="center"><a href="#ansible"><img src="images/ansible.png" width="75px;" height="75px;" alt="ansible"/><br /><b>Ansible</b></a></td>
|
||||
<td align="center"><a href="#Network"><img src="images/network.png" width="80x;" height="75px;" alt="Network"/><br /><b>Network</b></a></td>
|
||||
<td align="center"><a href="#linux"><img src="images/linux.png" width="75x;" height="75px;" alt="Linux"/><br /><b>Linux</b></a></td>
|
||||
<td align="center"><a href="#terraform"><img src="images/terraform.png" width="70px;" height="75px;" alt="Terraform"/><br /><b>Terraform</b></a></td>
|
||||
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="#programming"><img src="images/programming.png" width="75px;" height="75px;" alt="programming"/><br /><b>Programming</b></a></td>
|
||||
@ -35,7 +35,6 @@
|
||||
<td align="center"><a href="#scripts"><img src="images/bash.png" width="70px;" height="75px;" alt="Bash"/><br /><b>Scripts</b></a></td>
|
||||
<td align="center"><a href="#kubernetes"><img src="images/kubernetes.png" width="75px;" height="75px;" alt="kubernetes"/><br /><b>Kubernetes</b></a></td>
|
||||
<td align="center"><a href="#prometheus"><img src="images/prometheus.png" width="75px;" height="75px;" alt="Prometheus"/><br /><b>Prometheus</b></a></td>
|
||||
<td align="center"><a href="#mongo"><img src="images/mongo.png" width="75px;" height="75px;" alt="Mongo"/><br /><b>Mongo</b></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="#cloud"><img src="images/cloud.png" width="110px;" height="75px;" alt="Cloud"/><br /><b>Cloud</b></a></td>
|
||||
@ -44,16 +43,14 @@
|
||||
<td align="center"><a href="#gcp"><img src="images/googlecloud.png" width="80px;" height="75px;" alt="Google Cloud Platform"/><br /><b>Google Cloud Platform</b></a></td>
|
||||
<td align="center"><a href="#openstack"><img src="images/openstack.png" width="75px;" height="75px;" alt="openstack"/><br /><b>OpenStack</b></a></td>
|
||||
<td align="center"><a href="#security"><img src="images/security.png" width="75px;" height="75px;" alt="security"/><br /><b>Security</b></a></td>
|
||||
<td align="center"><a href="#puppet"><img src="images/puppet.png" width="75px;" height="75px;" alt="puppet"/><br /><b>Puppet</b></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="#operating-system"><img src="images/os.png" width="75px;" height="75px;" alt="Operating System"/><br /><b>Operating System</b></a></td>
|
||||
<td align="center"><a href="#monitoring"><img src="images/monitoring.png" width="75px;" height="75px;" alt="Monitoring"/><br /><b>Monitoring</b></a></td>
|
||||
<td align="center"><a href="#elastic"><img src="images/elastic.png" width="110px;" height="75px;" alt="Elastic"/><br /><b>Elastic</b></a></td>
|
||||
<td align="center"><a href="#virtualization"><img src="images/virtualization.png" width="75px;" height="75px;" alt="Virtualization"/><br /><b>Virtualization</b></a></td>
|
||||
<td align="center"><a href="#dns"><img src="images/dns.png" width="75px;" height="75px;" alt="DNS"/><br /><b>DNS</b></a></td>
|
||||
<td align="center"><a href="#operating-system"><img src="images/os.png" width="75px;" height="75px;" alt="Operating System"/><br /><b>Operating System</b></a></td>
|
||||
<td align="center"><a href="#distributed"><img src="images/distributed.png" width="110px;" height="75px;" alt="Distributed"/><br /><b>Distributed</b></a></td>
|
||||
<td align="center"><a href="#general"><img src="images/general.png" width="110px;" height="75px;" alt="General"/><br /><b>General</b></a></td>
|
||||
<td align="center"><a href="#Misc"><img src="images/general.png" width="110px;" height="75px;" alt="Misc"/><br /><b>Misc</b></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="#testing"><img src="images/testing.png" width="75px;" height="75px;" alt="Testing"/><br /><b>Testing</b></a></td>
|
||||
@ -62,7 +59,6 @@
|
||||
<td align="center"><a href="#system-design"><img src="images/design.png" width="110px;" height="75px;" alt="Design"/><br /><b>System Design</b></a></td>
|
||||
<td align="center"><a href="#hardware"><img src="images/hardware.png" width="110px;" height="75px;" alt="Hardware"/><br /><b>Hardware</b></a></td>
|
||||
<td align="center"><a href="#big-data"><img src="images/big-data.png" width="110px;" height="75px;" alt="Big Data"/><br /><b>Big Data</b></a></td>
|
||||
<td align="center"><a href="#questions-you-ask"><img src="images/you.png" width="110px;" height="75px;" alt="you"/><br /><b>Questions you ask</b></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="#certificates"><img src="images/certificates.png" width="75px;" height="75px;" alt="Certificates"/><br /><b>Certificates</b></a></td>
|
||||
@ -71,7 +67,13 @@
|
||||
<td align="center"><a href="#openshift"><img src="images/openshift.png" width="75px;" height="75px;" alt="OpenShift"/><br /><b>OpenShift</b></a></td>
|
||||
<td align="center"><a href="#storage"><img src="images/storage.png" width="75px;" height="75px;" alt="Storage"/><br /><b>Storage</b></a></td>
|
||||
<td align="center"><a href="#HR"><img src="images/HR.png" width="110px;" height="75px;" alt="HR"/><br /><b>HR</b></a></td>
|
||||
<td align="center"><a href="#exercises"><img src="images/exercises.png" width="110px;" height="75px;" alt="Exercises"/><br /><b>Exercises</b></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><a href="#terraform"><img src="images/terraform.png" width="70px;" height="75px;" alt="Terraform"/><br /><b>Terraform</b></a></td>
|
||||
<td align="center"><a href="#mongo"><img src="images/mongo.png" width="75px;" height="75px;" alt="Mongo"/><br /><b>Mongo</b></a></td>
|
||||
<td align="center"><a href="#puppet"><img src="images/puppet.png" width="75px;" height="75px;" alt="puppet"/><br /><b>Puppet</b></a></td>
|
||||
<td align="center"><a href="#distributed"><img src="images/distributed.png" width="110px;" height="75px;" alt="Distributed"/><br /><b>Distributed</b></a></td>
|
||||
<td align="center"><a href="#questions-you-ask"><img src="images/you.png" width="110px;" height="75px;" alt="you"/><br /><b>Questions you can ask</b></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
@ -81,6 +83,14 @@
|
||||
|
||||
## DevOps
|
||||
|
||||
### DevOps Exercises
|
||||
|
||||
|Name|Topic|Objective & Instructions|Solution|Comments|
|
||||
|--------|--------|------|----|----|
|
||||
| Set up a CI pipeline | CI | [Exercise](exercises/devops/ci_for_open_source_project.md) | | |
|
||||
|
||||
### DevOps Self Assessment
|
||||
|
||||
<details>
|
||||
<summary>What is DevOps?</summary><br><b>
|
||||
|
||||
@ -581,6 +591,15 @@ Read more about it [here](https://sre.google/sre-book/introduction)
|
||||
|
||||
## Jenkins
|
||||
|
||||
### Jenkins Exercises
|
||||
|
||||
|Name|Topic|Objective & Instructions|Solution|Comments|
|
||||
|--------|--------|------|----|----|
|
||||
| Remove Jobs | Scripts - Jobs | [Exercise](exercises/jenkins/remove_jobs.md) | [Solution](exercises/jenkins/solutions/remove_jobs_solution.groovy) | |
|
||||
| Remove Builds | Scripts - Builds | [Exercise](exercises/jenkins/remove_builds.md) | [Solution](exercises/jenkins/solutions/remove_builds_solution.groovy) | |
|
||||
|
||||
### Jenkins Self Assessment
|
||||
|
||||
<details>
|
||||
<summary>What is Jenkins? What have you used it for?</summary><br><b>
|
||||
|
||||
@ -876,8 +895,8 @@ There can be several reasons for that. One of them is lack of policy. To solve t
|
||||
<details>
|
||||
<summary>What should you use to:
|
||||
|
||||
* Grant access between two services/resources?
|
||||
* Grant user access to resources/services?</summary><br><b>
|
||||
- Grant access between two services/resources?
|
||||
- Grant user access to resources/services?</summary><br><b>
|
||||
|
||||
* Role
|
||||
* Policy
|
||||
@ -994,7 +1013,8 @@ False. Charges are being made when the code is executed.
|
||||
|
||||
- R, Swift, Rust, Kotlin
|
||||
- Python, Ruby, Go
|
||||
- Python, Ruby, PHP</summary><br><b>
|
||||
- Python, Ruby, PHP
|
||||
</summary><br><b>
|
||||
|
||||
- Python, Ruby, Go
|
||||
</b></details>
|
||||
@ -1058,9 +1078,9 @@ True
|
||||
<details>
|
||||
<summary>Explain the following:
|
||||
|
||||
* Object Lifecycles
|
||||
* Object Sharing
|
||||
* Object Versioning</summary><br><b>
|
||||
- Object Lifecycles
|
||||
- Object Sharing
|
||||
- Object Versioning</summary><br><b>
|
||||
|
||||
* Object Lifecycles - Transfer objects between storage classes based on defined rules of time periods
|
||||
* Object Sharing - Share objects via a URL link
|
||||
@ -1799,9 +1819,9 @@ Read more about it [here](https://aws.amazon.com/sns)
|
||||
<details>
|
||||
<summary>Explain the following in regards to SNS:
|
||||
|
||||
* Topics
|
||||
* Subscribers
|
||||
* Publishers</summary><br><b>
|
||||
- Topics
|
||||
- Subscribers
|
||||
- Publishers</summary><br><b>
|
||||
|
||||
* Topics - used for grouping multiple endpoints
|
||||
* Subscribers - the endpoints where topics send messages to
|
||||
@ -1878,12 +1898,13 @@ Learn more [here](https://aws.amazon.com/partners/consulting)
|
||||
<details>
|
||||
<summary>Which of the following are AWS accounts types (and are sorted by order)?
|
||||
|
||||
* Basic, Developer, Business, Enterprise
|
||||
* Newbie, Intermediate, Pro, Enterprise
|
||||
* Developer, Basic, Business, Enterprise
|
||||
* Beginner, Pro, Intermediate Enterprise</summary><br><b>
|
||||
- Basic, Developer, Business, Enterprise
|
||||
- Newbie, Intermediate, Pro, Enterprise
|
||||
- Developer, Basic, Business, Enterprise
|
||||
- Beginner, Pro, Intermediate Enterprise
|
||||
</summary><br><b>
|
||||
|
||||
* Basic, Developer, Business, Enterprise
|
||||
- Basic, Developer, Business, Enterprise
|
||||
</b></details>
|
||||
|
||||
<details>
|
||||
@ -2489,6 +2510,14 @@ Read more [here](https://www.globalsign.com/en/blog/what-is-hsts-and-how-do-i-us
|
||||
|
||||
## Linux
|
||||
|
||||
#### Linux Master Application
|
||||
|
||||
A completely free application for testing your knowledge on Linux
|
||||
|
||||
<a href="https://play.google.com/store/apps/details?id=com.codingshell.linuxmaster"><img src="images/linux_master.jpeg"/></a>
|
||||
|
||||
### Linux Self Assessment
|
||||
|
||||
<details>
|
||||
<summary>What is your experience with Linux?</summary><br><b>
|
||||
|
||||
@ -2741,9 +2770,9 @@ Its a bit that only allows the owner or the root user to delete or modify the fi
|
||||
<details>
|
||||
<summary>What the following commands do?
|
||||
|
||||
* chmod
|
||||
* chown
|
||||
* chgrp</summary><br><b>
|
||||
- chmod
|
||||
- chown
|
||||
- chgrp</summary><br><b>
|
||||
|
||||
* chmod - changes access permissions to files system objects
|
||||
* chown - changes the owner of file system files and directories
|
||||
@ -3085,8 +3114,8 @@ It means that the key of the remote host was changed and doesn't match the one t
|
||||
<details>
|
||||
<summary>What each of the following matches
|
||||
|
||||
* ?
|
||||
* *</summary><br><b>
|
||||
- ?
|
||||
- *</summary><br><b>
|
||||
|
||||
* The ? matches any single character
|
||||
* The * matches zero or more characters
|
||||
@ -4175,12 +4204,6 @@ MemAvailable - The amount of available memory for new workloads (without pushing
|
||||
GPL v2
|
||||
</b></details>
|
||||
|
||||
#### Linux Master Application
|
||||
|
||||
A completely free application for testing your knowledge on Linux
|
||||
|
||||
<a href="https://play.google.com/store/apps/details?id=com.codingshell.linuxmaster"><img src="images/linux_master.jpeg"/></a>
|
||||
|
||||
## Operating System
|
||||
|
||||
<details>
|
||||
@ -4943,6 +4966,15 @@ The Terraform Registry provides a centralized location for official and communit
|
||||
|
||||
## Containers
|
||||
|
||||
### Containers Exercises
|
||||
|
||||
|Name|Topic|Objective & Instructions|Solution|Comments|
|
||||
|--------|--------|------|----|----|
|
||||
|My First Dockerfile|Dockerfile|[Link](exercises/write_dockerfile_run_container.md)|[Link](exercises/write_dockerfile_run_container.md)
|
||||
|
||||
|
||||
### Containers Self Assesment
|
||||
|
||||
<details>
|
||||
<summary>What is a Container? What is it used for?</summary><br><b>
|
||||
|
||||
@ -5182,6 +5214,16 @@ Because each container has its own writable container layer, and all changes are
|
||||
|
||||
<a name="kubernetes"></a>
|
||||
|
||||
### Kubernetes Exercises
|
||||
|
||||
#### Developer & Regular User Path
|
||||
|
||||
|Name|Topic|Objective & Instructions|Solution|Comments|
|
||||
|--------|--------|------|----|----|
|
||||
|My First Pod|Dockerfile|WIP|WIP
|
||||
|
||||
### Kubernetes Self Assesment
|
||||
|
||||
<details>
|
||||
<summary>What is Kubernetes? Why organizations are using it?</summary><br><b>
|
||||
|
||||
@ -5204,6 +5246,10 @@ At a minimum, a cluster contains a worker node and a master node."
|
||||
Read more [here](https://www.redhat.com/en/topics/containers/what-is-a-kubernetes-cluster)
|
||||
</b></details>
|
||||
|
||||
<details>
|
||||
<summary>When or why NOT to use Kubernetes?</summary><br><b>
|
||||
</b></details>
|
||||
|
||||
#### Kubernetes Nodes
|
||||
|
||||
<details>
|
||||
@ -6865,6 +6911,8 @@ class MyClass(object):
|
||||
```
|
||||
</b></details>
|
||||
|
||||
#### Python - Exceptions
|
||||
|
||||
<details>
|
||||
<summary>What is an error? What is an exception? What types of exceptions are you familiar with?</summary><br><b>
|
||||
|
||||
@ -6954,6 +7002,20 @@ For more details about errors and exceptions follow this [https://docs.python.or
|
||||
|
||||
</b></details>
|
||||
|
||||
<details>
|
||||
<summary>What is the result of running the following function?
|
||||
|
||||
```
|
||||
def true_or_false():
|
||||
try:
|
||||
return True
|
||||
finally:
|
||||
return False
|
||||
```
|
||||
</summary><br><b>
|
||||
False
|
||||
</b></details>
|
||||
|
||||
#### Python Built-in functions
|
||||
|
||||
<details>
|
||||
@ -8429,6 +8491,11 @@ Alert manager is responsible for alerts ;)
|
||||
|
||||
## Git
|
||||
|
||||
|Name|Topic|Objective & Instructions|Solution|Comments|
|
||||
|--------|--------|------|----|----|
|
||||
| My first Commit | Commit | [Exercise](exercises/git/commit_01.md) | [Solution](exercises/git/solutions/commit_01_solution.md) | |
|
||||
| Time to Branch | Branch | [Exercise](exercises/git/branch_01.md) | [Solution](exercises/git/solutions/branch_01_solution.md) | |
|
||||
|
||||
<details>
|
||||
<summary>How do you know if a certain directory is a git repository?</summary><br><b>
|
||||
|
||||
@ -10908,10 +10975,10 @@ It's an architecture in which data is and retrieved from a single, non-shared, s
|
||||
<summary>Explain the Sidecar Pattern (Or sidecar proxy)</summary><br><b>
|
||||
</b></details>
|
||||
|
||||
## General
|
||||
## Misc
|
||||
|
||||
<details>
|
||||
<summary>What is a server?</summary><br><b>
|
||||
<summary>What is a server? What is a client?</summary><br><b>
|
||||
|
||||
A computer which serves data from itself to the client.
|
||||
</b></details>
|
||||
@ -10924,6 +10991,13 @@ I like this definition from [here](https://blog.christianposta.com/microservices
|
||||
"An explicitly and purposefully defined interface designed to be invoked over a network that enables software developers to get programmatic access to data and functionality within an organization in a controlled and comfortable way."
|
||||
</b></details>
|
||||
|
||||
<details>
|
||||
<summary>What is Automation? How it's related or different from Orchestration?</summary><br><b>
|
||||
|
||||
Automation is the act of automating tasks to reduce human intervention or interaction in regards to IT technology and systems.<br>
|
||||
While automation focuses on a task level, Orchestration is the process of automating processes and/or workflows which consists of multiple tasks that usually across multiple systems.
|
||||
</b></details>
|
||||
|
||||
<details>
|
||||
<summary>Tell me about interesting bugs you've found and also fixed</summary><br><b>
|
||||
</b></details>
|
||||
@ -11557,6 +11631,13 @@ Sharding is a horizontal partitioning.
|
||||
Are you able to explain what is it good for?
|
||||
</b></details>
|
||||
|
||||
<details>
|
||||
<summary>You find out your database became a bottleneck and users experience issues accessing data. How can you deal with such situation?</summary><br><b>
|
||||
|
||||
Not much information provided as to why it became a bottleneck and what is current architecture, so one general approach could be<br>
|
||||
to reduce the load on your database by moving frequently-accessed data to in-memory structure.
|
||||
</b></details>
|
||||
|
||||
<details>
|
||||
<summary>What is a connection pool?</summary><br><b>
|
||||
|
||||
@ -12073,47 +12154,6 @@ If you are looking for a way to prepare for a certain exam this is the section f
|
||||
|
||||
* [Certified Kubernetes Administrator (CKA)](certificates/cka.md) (Latest update: 2020)
|
||||
|
||||
## Exercises
|
||||
|
||||
Exercises are all about:
|
||||
|
||||
* Setting up environments
|
||||
* Writing scripts
|
||||
* Designing and/or developing infrastructure apps
|
||||
* Fixing existing applications
|
||||
|
||||
Below you can find several exercises
|
||||
|
||||
#### Containers
|
||||
* [Writing a Dockerfile and running a container](exercises/write_dockerfile_run_container.md)
|
||||
|
||||
#### Jenkins
|
||||
|
||||
* [Jenkins: writing scripts](exercises/jenkins_scripts.md)
|
||||
* [Jenkins: writing pipelines](exercises/jenkins_pipelines.md)
|
||||
|
||||
#### CI/CD
|
||||
|
||||
* [CI for open source project](exercises/ci_for_open_source_project.md)
|
||||
* [Write a pipeline - Docker image and K8](exercises/pipeline_deploy_image_to_k8.md)
|
||||
|
||||
#### Programming
|
||||
|
||||
* [grep before and after](exercises/programming/grep_berfore_and_after.md)
|
||||
* [web scrapper](exercises/programming/web_scraper.md)
|
||||
|
||||
#### Mixed
|
||||
|
||||
* [Flask, Containers and CI](exercises/flask_container_ci/README.md)
|
||||
* [Flask, Containers and CI 2](exercises/flask_container_ci2/README.md)
|
||||
|
||||
#### Misc
|
||||
|
||||
* [Elasticsearch & Kibana on AWS](exercises/misc/elk_kibana_aws.md)
|
||||
* [ELK & Filebeat](exercises/eflk.md)
|
||||
* [Ansible, Minikube and Docker](exercises/ansible_minikube_docker.md)
|
||||
* [Cloud Slack bot](exercises/cloud_slack_bot.md)
|
||||
|
||||
## Other DevOps Projects
|
||||
|
||||
<p align="center"><a href="https://github.com/bregman-arie/howtheydevops"><img src="images/how_they_devops.png"/></a></p>
|
||||
|
@ -2,9 +2,10 @@
|
||||
|
||||
import random
|
||||
|
||||
|
||||
def binary_search(arr, lb, ub, target):
|
||||
"""
|
||||
A Binary Search Example which has O(log n) time complexity.
|
||||
A Binary Search Example which has O(log n) time complexity.
|
||||
"""
|
||||
if lb <= ub:
|
||||
mid = ub + lb // 2
|
||||
@ -17,6 +18,7 @@ def binary_search(arr, lb, ub, target):
|
||||
else:
|
||||
return -1
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
rand_num_li = sorted([random.randint(1, 50) for _ in range(10)])
|
||||
target = random.randint(1, 50)
|
||||
|
@ -9,4 +9,4 @@
|
||||
|
||||
### Bonus
|
||||
|
||||
Containerize the app of the project you forked using any containerization technology you want.
|
||||
Containerize the app of the project you forked using any containerization technology you would like.
|
19
exercises/git/branch_01.md
Normal file
19
exercises/git/branch_01.md
Normal file
@ -0,0 +1,19 @@
|
||||
## Git Commit 01
|
||||
|
||||
### Objective
|
||||
|
||||
Learn how to work with Git Branches
|
||||
|
||||
### Instructions
|
||||
|
||||
1. Pick up a Git repository (or create a new one) with at least one commit
|
||||
2. Create a new branch called "dev"
|
||||
3. Modify one of the files in the repository
|
||||
4. Create a new commit
|
||||
5. Verify the commit you created is only in "dev" branch
|
||||
|
||||
### After you complete the exercise
|
||||
|
||||
Answer the following:
|
||||
|
||||
1. Why branches are useful? Give an example of one real-world scenario for using branches
|
20
exercises/git/commit_01.md
Normal file
20
exercises/git/commit_01.md
Normal file
@ -0,0 +1,20 @@
|
||||
## Git Commit 01
|
||||
|
||||
### Objective
|
||||
|
||||
Learn how to commit changes in Git repositories
|
||||
|
||||
### Instructions
|
||||
|
||||
1. Create a new directory
|
||||
2. Make it a git repository
|
||||
3. Create a new file called `file` with the content "hello commit"
|
||||
4. Commit your new file
|
||||
5. Run a git command to verify your commit was recorded
|
||||
|
||||
### After you complete the exercise
|
||||
|
||||
Answer the following:
|
||||
|
||||
* What are the benefits of commits?
|
||||
* Is there another way to verify a commit was created?
|
20
exercises/git/solutions/branch_01_solution.md
Normal file
20
exercises/git/solutions/branch_01_solution.md
Normal file
@ -0,0 +1,20 @@
|
||||
## Branch 01 - Solution
|
||||
|
||||
```
|
||||
cd some_repository
|
||||
echo "master branch" > file1
|
||||
git add file1
|
||||
git commit -a -m "added file1"
|
||||
git checkout -b dev
|
||||
echo "dev branch" > file2
|
||||
git add file2
|
||||
git commit -a -m "added file2"
|
||||
```
|
||||
|
||||
Verify:
|
||||
|
||||
```
|
||||
git log (you should see two commits)
|
||||
git checkout master
|
||||
git log (you should see one commit)
|
||||
```
|
10
exercises/git/solutions/commit_01_solution.md
Normal file
10
exercises/git/solutions/commit_01_solution.md
Normal file
@ -0,0 +1,10 @@
|
||||
## Git Commit 01 - Solution
|
||||
|
||||
```
|
||||
mkdir my_repo && cd my_repo
|
||||
git init
|
||||
echo "hello_commit" > file
|
||||
git add file
|
||||
git commit -a -m "It's my first commit. Exciting!"
|
||||
git log
|
||||
```
|
14
exercises/jenkins/remove_builds.md
Normal file
14
exercises/jenkins/remove_builds.md
Normal file
@ -0,0 +1,14 @@
|
||||
### Jenkins - Remove Jobs
|
||||
|
||||
#### Objective
|
||||
|
||||
Learn how to write a Jenkins script that interacts with builds by removing builds older than X days.
|
||||
|
||||
#### Instructions
|
||||
|
||||
1. Pick up (or create) a job which has builds older than X days
|
||||
2. Write a script to remove only the builds that are older than X days
|
||||
|
||||
#### Hints
|
||||
|
||||
X can be anything. For example, remove builds that are older than 3 days. Just make sure that you don't simply remove all the builds (since that's different from the objective).
|
10
exercises/jenkins/remove_jobs.md
Normal file
10
exercises/jenkins/remove_jobs.md
Normal file
@ -0,0 +1,10 @@
|
||||
### Jenkins - Remove Jobs
|
||||
|
||||
#### Objective
|
||||
|
||||
Learn how to write a Jenkins script to remove Jenkins jobs
|
||||
|
||||
#### Instructions
|
||||
|
||||
1. Create three jobs called: test-job, test2-job and prod-job
|
||||
2. Write a script to remove all the jobs that include the string "test"
|
@ -1,4 +1,4 @@
|
||||
def jobs = Jenkins.instance.items.findAll { job -> job.name =~ /"REMOVE_ME"/ }
|
||||
def jobs = Jenkins.instance.items.findAll { job -> job.name =~ /"test"/ }
|
||||
|
||||
jobs.each { job ->
|
||||
println job.name
|
@ -2,4 +2,4 @@
|
||||
|
||||
# We dont care about non alphanumerics filenames so we just ls | grep to shorten the script.
|
||||
|
||||
echo $(( $(ls -R ./exercises/ | grep ".*md" -c) + $(grep \</summary\> -c README.md) ))
|
||||
echo $(( $(grep \</summary\> -c README.md) + $(grep -i Solution README.md | grep \.md -c) ))
|
||||
|
Loading…
Reference in New Issue
Block a user