Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
message: |
PyTest success
Workflow failed
Commit message: ${{ github.event.commits[0].message }}
Repository: ${{ github.repository }}
See changes: https://github.com/${{ github.repository }}/commit/${{github.sha}}
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/docker-build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ on:
- main
types:
- closed
paths:
- './Dockerfile'
- './manage.py'

jobs:
build-and-push:
Expand Down
2 changes: 0 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ RUN pip install --no-cache-dir -r requirements.txt

COPY ./manage.py .

# RUN ./manage.py migrate

COPY docker-entrypoint.sh .

EXPOSE 8000
Expand Down
1 change: 0 additions & 1 deletion Jenkinsfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
pipeline {
agent any


stages {
stage('Hello') {
steps {
Expand Down
54 changes: 51 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,55 @@
# Django example app

Application made by django's instruction for **DevOps** education purposes
Пример веб-приложения из туториала по Django для изучения **DevOps**-практик.

# Pylint
![pylint]()

![pylint](https://img.shields.io/badge/PyLint-6.22-orange?logo=python&logoColor=white)
## Описание приложения

Простое приложение для голосования. В данный момент есть только одно
голосование: "Will it work?", с двумя вариантами ответа "Yes" и "No".

Приложение запаковано в docker-образ и доступно в
[DockerHub](https://hub.docker.com/r/wtukatyr/django-example-app).

## Пайплайн

Пайплайн состоит из трех сегментов.

1. CI-сегмент с проверками кода ([YML-файл](./.github/workflows/ci.yml)).
2. Сегмент со сборкой образа Docker и пушем в DockerHub ([YML-файл](./.github/workflows/docker-build.yaml)).
3. Сегмент с деплоем на сервер с помощью Jenkins ([YML-файл](./.github/workflows/jenkins-deploy.yml)).

### CI-сегмент

Этот пайплайн срабатывает, если открывается pull-request в ветку **main**.

Порядок действий:

1. Получение кодовой базы (*checkout*).
2. Проверка синтаксиса и его рекомендаций в Dockerfile, с помощью `hadolint`.
3. Проверка синтаксиса кода с помощью *pylint*.
4. Установка python и зависимостей для него (см. файл
[requirements.txt](./requirements.txt))
5. Запуск тестов с помощью *pytest*.
6. В случае провала любого из предыдущих этапов отправляется
уведомление в телеграме.
7. В случае успеха, также отправляется сообщение в телеграме.

### Docker build and push

Этот пайплайн собирает образ Docker и пушит его в DockerHub в случае если
pull-request закрыт и в нем были затронуты файлы *Dockerfile* и *manage.py*.

### Jenkins Deploy

Этот пайплайн деплоит приложение на сервер. Он запускается только если
успешно сработал предыдущий workflow.

Пайплайн состоит из двух частей:

- [Workflow-файла](.github/workflows/jenkins-deploy.yml), который триггерит
работу Jenkins с помощью `curl` и API.
- [Jenkinsfile](Jenkinsfile), в котором описана процесс деплоя. Он состоит в
том, чтобы подключиться к серверу, зайти в нужную папку и выполнить ряд
комманд (`git pull`, `docker compose pull` и пр.).