Я недавно обнаружил Действия GitHub Как удивительно простой способ настроить непрерывную интеграцию для моего .NET Основные веб-приложения.
Давным-давно Я писал о том, как я принимаю свои веб-пары на небольшом VPS Linux Отказ Чтобы развернуть новую версию, которую я должен создать мое веб-приложение, скопировать файлы на моем сервере, а затем перезапустить мою систему Systemd Service, которая запускает время выполнения Dotnet и запускает приложение.
С Действием GitHub весь этот процесс можно автоматизировать, добавив один файл в ваш репозиторий. Каждое действие состоит из рабочий процесс Файл определения, который размещен в ..Github/Workflows/
папка. Рабочий процесс состоит из ряда действий, которые либо запускают скрипт напрямую или выполняют контейнер докера.
Вы можете добавить рабочий процесс прямо в GitHub, если вы идете на Действия вкладка вашего репозитория. Отсюда вы можете выбрать ряд Стартер Рабочие процессы для различных инструментов разработки или создают новый рабочий процесс с нуля. Великое — это редактор, который позволяет вам быстро посмотреть все различные действия, которые вы можете использовать в своем рабочем процессе с рынка на левой стороне.
Файл рабочего процесса выглядит так:
name: CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Run a one-line script run: echo Hello, world! - name: Run a multi-line script run: | echo Add other actions to build, echo test, and deploy your project.
Файл определяет, когда действие срабатывает и какие шаги выполняются.
Мой рабочий процесс
Я публикую .NET Приложение Core MVC, поэтому мне нужно выполнить следующее, когда сделан коммит для моего Мастер
ветка:
- Оформить заказ мой репозиторий
- Беги
Dotnet Publish
построить мое приложение - Скопируйте файлы на мой сервер
- Перезапустите сервис на моем сервере
Поэтому сначала мы настроили скрипт, чтобы запустить, когда сделан коммит. Но мы хотим ограничить его только Мастер
ветка:
on: push: branches: - master
Далее в Работа
Раздел Мы собираемся добавить нашу работу и определить, какая система виртуальной машины будет использоваться для его запуска. GitHub предоставляет бегунам для Linux, Windows и MacO. Увидев, как я парень Linux, я собираюсь использовать это:
jobs: build: runs-on: ubuntu-latest
Далее мы добавляем каждый шаг, нам нужно сделать, чтобы развернуть наше приложение, как указано выше. Это настроено в Шаги
раздел. Сначала мы оформием репозиторий:
steps: - uses: actions/checkout@v1
Тогда нам нужно настроить .NET Ядро и построить наше приложение. Обратите внимание на версию .NET Вам нужно — это должно соответствовать вашему приложению:
- name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 2.2.108 - name: Dotnet Publish run: dotnet publish src -c Release -o deploy
Это создает и опубликовал наши файлы на /развертывать
каталог на виртуальной машине. Далее хороший бит! Мы используем пару отличных сторонних команд с рынка, чтобы скопировать файлы, используя SCP на сервер.
- name: Copy via ssh uses: garygrossgarten/github-action-scp@v0.5.3 with: local: /home/runner/work/deferat/deferat/src/deploy/ remote: ${{ secrets.REMOTE_TARGET }} host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} privateKey: ${{ secrets.REMOTE_SSH_KEY }}
Очень важно, чтобы мы не совершаем пароли в коде к нашему репозитории (включая определение нашего рабочего процесса — это код в конце концов!) Как они могут быть прочитаны кем-либо! Итак, мы используем Секреты вкладка в Настройки вкладки репозитория. Добавлены любые переменные, добавленные здесь, будут доступны в сценарии INT, он формат $ {{Секреты. Secret_name}}
:
Наконец, я собираюсь запустить команду ssh, чтобы перезапустить сервис, у меня на моем сервере. Команда запустить Сервис Deferat Start.
Итак, мы делаем это так:
- name: Run SSH command uses: garygrossgarten/github-action-ssh@v0.3.0 with: command: sudo service deferat start host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} privateKey: ${{ secrets.REMOTE_SSH_KEY }}
Рабочий процесс теперь завершен! Как только файл будет совершен (прямо на Master филиал конечно 😄), это будет вызвать действие. Теперь, когда вы переходите на вкладку «Действия», вы можете увидеть журнал каждый раз, когда рабочий процесс запускается, и вы можете увидеть подробный журнал каждого шага. Каждый шаг можно расширить, чтобы увидеть больше информации.
Финал Main.yml
Файл выглядит так:
name: CI on: push: branches: - master jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 2.2.108 - name: Dotnet Publish run: dotnet publish src -c Release -o deploy - name: Copy via ssh uses: garygrossgarten/github-action-scp@v0.5.3 with: local: /home/runner/work/deferat/deferat/src/deploy/ remote: ${{ secrets.REMOTE_TARGET }} host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} privateKey: ${{ secrets.REMOTE_SSH_KEY }} - name: Run SSH command uses: garygrossgarten/github-action-ssh@v0.3.0 with: command: sudo service deferat start host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} privateKey: ${{ secrets.REMOTE_SSH_KEY }}
И там это! Простой файл И у вас есть создание вашего приложения и развертывание непосредственно на сервер 🎉
Увидеть это в действии в моем репозитории в блоге здесь: https://github.com/euronay/deferat
Оригинал: «https://dev.to/euronay/automatically-deploy-your-net-core-app-using-github-actions-45a»