DevOps
CI (Continuous Integration)
Подразумевает регулярное слияние изменений в общий репозиторий, что позволяет выявлять ошибки на ранних стадиях. Каждый раз, когда разработчик вносит изменения, автоматически запускаются тесты, что позволяет обеспечить высокое качество кода.
CD (Continuous Delivery)
Подразумевает автоматизацию процесса доставки кода в продакшен, обеспечивая возможность развертывания в любое время. Ускорение процесса развертывания и уменьшение количества ошибок, связанных с ручным развертыванием.
GitHub Actions
GitHub Actions — встроенный CI/CD инструмент на GitHub, который позволяет автоматизировать сборку, тестирование и развертывание проектов прямо из репозитория. Поддерживает контейнеры и серверные задачи, а также легко интегрируется с другими сервисами GitHub.
on
Содержит события, которые будут триггерить запуск workflow. Этот раздел позволяет задать как автоматические события (например, push, pull_request), так и вручные (workflow_dispatch).
push
Запускает workflow при пуше в репозиторий. Можно настроить для определённых веток, тегов или типов файлов.
on:
push:
branches:
- main
tags:
- 'v*' # Срабатывает при пуше тегов, начинающихся с "v"
paths:
- 'src/**' # Срабатывает при изменении файлов в папке src
pull_request
Запускает workflow при создании или обновлении pull request. Как и с push
, можно ограничить запуск для определённых веток или типов файлов.
on:
pull_request:
branches:
- main
paths-ignore:
- '**/*.md' # Игнорирует изменения только в .md файлах
workflow_dispatch
Добавляет возможность вручного запуска workflow.
on:
workflow_dispatch:
inputs:
environment:
description: 'Deployment environment'
required: true
default: 'production'
type: choice
options:
- development
- staging
- production
schedule
Позволяет настроить запуск по расписанию, используя cron-формат.
on:
schedule:
- cron: '0 3 * * *' # Запускается ежедневно в 3:00 UTC
release
Запускает workflow при создании, публикации или изменении релиза.
on:
release:
types:
- created # Срабатывает при создании релиза
- published # Срабатывает при публикации
issues
Позволяет запускать workflow при действиях с issue
(например, открытие, закрытие, комментарий и т.д.).
on:
issues:
types: [opened, edited]
concurrency
Используется для управления параллельным выполнением workflow, чтобы избежать одновременного запуска конфликтующих задач, оптимизировать использование ресурсов и предотвратить избыточные запуски. Этот параметр позволяет объединять workflow в группы и при необходимости отменять уже выполняющиеся задачи.
group
Определяет группу для workflow, которые не должны выполняться одновременно. Задав группу, можно указать, что workflow из этой группы не могут быть запущены параллельно. Значение группы может быть статическим или динамическим с использованием переменных.
concurrency:
group: build-${{ github.ref }}
cancel-in-progress
Контролирует, должны ли уже запущенные workflow в этой группе быть отменены при запуске нового.
• true
отменяет текущие выполняющиеся workflow из этой группы при запуске нового.
• false
оставляет текущие запущенные workflow в группе, не отменяя их.
concurrency:
group: build-${{ github.ref }}
cancel-in-progress: true
jobs
Представляют собой отдельные задачи, которые выполняются в рамках одного workflow. Каждый job
содержит набор шагов (steps), определяющих, что должно быть выполнено в рамках этого задания. Задачи могут быть независимыми или зависеть друг от друга, и GitHub предоставляет гибкие возможности для их настройки.
Название задания
Каждый job
может иметь уникальное имя, которое помогает организовать и понять назначение задачи в workflow.
jobs:
build:
runs-on
Указывает, на каком типе виртуальной машины (runner) будет выполняться job
. Например, ubuntu-latest
, macos-latest
, или windows-latest
.
jobs:
build:
runs-on: ubuntu-latest
steps
Задаёт последовательность шагов, выполняемых в рамках job
. Шаги могут включать команды, действия, сценарии и проверки.
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v2
- name: Run tests
run: ./gradlew test
needs
Позволяет задать зависимость одного задания от другого. Например, если deploy
должен выполняться только после успешного выполнения build
, можно указать needs
.
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Build code
run: ./gradlew build
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy application
run: ./deploy.sh
if
Позволяет указать, при каких условиях job
должен выполняться. Например, можно запускать job
только при выполнении определённых условий (например, при пуше в основную ветку).
jobs:
build:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Build code
run: ./gradlew build
timeout-minutes
Устанавливает максимальное время выполнения для job
, после которого выполнение будет прервано, чтобы избежать бесконечных циклов или задержек.
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Build code
run: ./gradlew build
env
Можно передавать секретные данные или переменные окружения, которые будут использоваться только в рамках этого job
.
jobs:
deploy:
runs-on: ubuntu-latest
env:
DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }}
steps:
- name: Deploy code
run: ./deploy.sh
GitLab CI
https://docs.gitlab.com/ee/ci/ |
GitLab CI — встроенная система CI/CD в GitLab, которая позволяет автоматизировать процессы сборки, тестирования и развертывания кода. Полностью интегрирован с системой управления версиями, что делает его удобным для проектов, хостящихся в GitLab.
Bitrise
https://bitrise.io/ |
Bitrise — облачная CI/CD платформа, оптимизированная для мобильной разработки. Предоставляет преднастроенные шаги для тестирования и развертывания iOS и Android приложений.
Fastlane
https://fastlane.tools/ |
Fastlane — инструмент, ориентированный на автоматизацию рутинных задач в мобильной разработке, таких как сборка, тестирование, публикация и управление сертификатами. Часто используется вместе с другими CI/CD системами, такими как Jenkins или Bitrise.
CircleCI
https://circleci.com/ |
CircleCI — популярная платформа для CI/CD, которая предлагает как облачные, так и локальные решения. Хорошо интегрируется с GitHub и Bitbucket и поддерживает параллельное выполнение задач для ускорения процессов.
Jenkins
https://www.jenkins.io/ |
Jenkins — open-source CI/CD сервер с широкими возможностями кастомизации через плагины. Поддерживает различные языки программирования и инструменты, что делает его одним из наиболее гибких решений.
Travis CI
https://www.travis-ci.com/ |
Travis CI — облачная платформа CI/CD, которая предоставляет простую конфигурацию через файл .travis.yml. Хорошо интегрируется с GitHub, и часто используется для open-source проектов.
TeamCity
https://www.jetbrains.com/teamcity/ |
TeamCity — мощный CI/CD инструмент от JetBrains, поддерживающий гибкую настройку билдов и интеграцию с различными IDE и системами контроля версий. Хорошо подходит для больших команд благодаря своим функциям для параллельных билдов и отчетности.
Вопросы на собесе (1)
- Для чего используется CI?
Для автоматизации сборки и тестирования кода при каждом изменении, чтобы быстро выявлять ошибки и поддерживать стабильность проекта.