Я недавно обнаружил Действия 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»