Задать вопрос
vaflya
@vaflya
Ничего личного, это всего лишь хобби.

Как сделать github CI/CD на VPS для node.js?

Добрый день! Пытаюсь сделать ci/cd для github. Гуглил статьи, толковых очень мало, а некоторые уже устаревшие и не работают. Застопорился в deploy на VPS.

Как сейчас реализовано:
1) Написан .github/workflows/push.yaml
# Создаем тригер когда кто-то пушит код в репозиторий
on: push
name: npm build, lint, test and publish

# Создаем задачи для сборки проекта и запуска на ubuntu-latest.
# Каждая задача будет запущенна в новой копии приложения на виртуальном сервереt..
jobs:
  build-and-publish:
    name: build and publish
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - uses: actions/setup-node@v1
        with:
          node-version: '10.x'
      - run: npm install
      - run: npm test

        # Создаем Docker образ
      - name: Publish to Docker Repository
        uses: elgohr/Publish-Docker-Github-Action@master
        with:
          name: vaflya/project
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
          run: docker build -t back .

2) github устанавливает зависимости и прогоняет тесты
3) создает docker  контейнер
Dockerfile
FROM node
WORKDIR /
COPY . .
RUN npm install
EXPOSE 3000
ENTRYPOINT ["npm", "start"]

4) Пушит в docker hub

и тут затык. Как мне со стороны VPS узнать что создан новый контейнер и развернуть его на VPS?
И нужно ли в моем случае использовать докер? Учитывая что я использую только docker-compose
  • Вопрос задан
  • 1073 просмотра
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@de1m
Вы неправильно кошку готовите.
Пункт три надо делать пассивно, то есть включаете интерграция с github'ом в docker hub и потом можно создавать "Automated build". При каждом пуше будет создаваться образ.
Скриптом ниже можно проверять существует ли образ:
function docker_tag_exists() {
    curl --silent -f -lSL https://index.docker.io/v1/repositories/$1/tags/$2 > /dev/null
}

if docker_tag_exists library/nginx 1.7.5; then
    echo exist
else 
    echo not exists
fi
Ответ написан
@q2digger
никого не трогаю, починяю примус
Для этого придумали специальный сервис - watchtower , выкатываете себе этот контейнер, он следит за обновлениями развернутых на хосте контейнеров и в случае необходимости их обновляет.
https://github.com/containrrr/watchtower
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы