Skip to content

Instantly share code, notes, and snippets.

@igorkamyshev
Last active July 2, 2019 09:55
Show Gist options
  • Save igorkamyshev/66b1a08ac1735f8cea61e5da6a4d908f to your computer and use it in GitHub Desktop.
Save igorkamyshev/66b1a08ac1735f8cea61e5da6a4d908f to your computer and use it in GitHub Desktop.
Medium — Breadhead — CD
version: 2
jobs:
# ...
build_and_push:
docker:
# Для билда контейнера нам нужен только докер
- image: docker:17.05.0-ce-git
working_directory: ~/repo
steps:
- checkout
# Сделайте это, потом почитайте в документации
- setup_remote_docker
- run:
name: Setup Env
# Замените "my-favorite-image" на имя вашего образа
# В этом шаге мы в качестве докер-тега будем использовать гит-тег
# Если гит-тега нет, используем докер-тег "latest"
command: |
echo 'export IMAGE_TAG=${CIRCLE_TAG:-latest}' >> $BASH_ENV
echo 'export IMAGE_NAME=my-favorite-image' >> $BASH_ENV
- run:
name: Build and push Docker image
# Замените "my-organization" на имя вашей организации
# DOCKER_USERNAME и DOCKER_PASSWORD — переменные окружения
# Их можно задать в интерфейсе CircleCI
command: |
source $BASH_ENV
docker build -f Dockerfile-front -t my-organization/$IMAGE_NAME:$IMAGE_TAG .
docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD"
docker push my-organization/$IMAGE_NAME:$IMAGE_TAG
deliver:
machine:
enabled: true
steps:
- run:
# Деплоим просто по SSH
# Заходим на сервер, выкачиваем новый образ и перезапускаем все
# SSH_USER и SSH_HOST — переменные окружения
name: Deploy Over SSH
command: ssh $SSH_USER@$SSH_HOST "cd /path-to-app &&
sudo docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD" &&
sudo docker pull my-organization/my-favorite-image &&
sudo docker logout &&
sudo docker-compose down &&
sudo docker-compose up -d &&
sudo docker image prune -f"
workflows:
version: 2
# ...
deploy-dev:
jobs:
- build_and_push:
# Билд нового контейнера запускаем только для мастер ветки
filters:
branches:
only:
- master
- deliver:
# Доставку тоже
filters:
branches:
only:
- master
# Доставку следует начинать только после того, как билд завершился
requires:
- build_and_push
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment