Трубопроводы CI подтверждаются изначально в действиях GitHub. Добавьте один файл определения рабочего процесса в свой репозиторий и запустите автоматические тесты, проверку безопасности и стиля кода по каждому запросу. Полный код и конфигурация в Репо
Я призываю вас уделить минутку и оценить прекрасное время, в котором мы живем и работаем.
Представьте себе, что нужно, чтобы установить конвейер непрерывной интеграции несколько лет назад. Одним из самых популярных инструментов для размещения рабочих мест CI/CD был (есть) Дженкинс, поэтому вам пришлось сделать следующее как минимум:
- Предоставить сервер и установить ОС
- Установите Дженкинс
- Исследовать и установить необходимые плагины Jenkins
- Настройте веб -крючки, чтобы запустить задания на Commits и новые PRS и интегрируйте с GIT
- Убедитесь, что доступ к сети к WebHooks ограничен доверенным клиентом Только
Как только все будет настроено, вы не закончили. На самом деле, вы никогда не делали, потому что теперь вам нужно:
- Установите и обновите ОС и программное обеспечение
- Патч и обновить Дженкинс и его плагины
- Справиться с сбоями сервера оборудования
- Мониторинг процессора, память и диск, чтобы убедиться, что сервер не является ни разу.
Честно говоря, с такими инвестициями требовалось, что бюджет каждого проекта не позволил для рабочих процессов CI/CD.
А как насчет сейчас?
Благодаря современной технологии, предлагаемым облачными провайдерами, без серверов и мощным инструментам, мы можем создавать и запускать новые продукты/проекты в течение нескольких дней и недель.
Что не изменилось, так это требование, чтобы код был исполнением, безопасным, свободным от ошибок и последовательно стилизованным.
Если вы размещаете свои частные репозитории или с открытым исходным кодом на GitHub, вы можете построить CI -конвейеры с помощью GitHub. Каждый раз, когда вы совершаете изменение или выполняете запрос на привлечение, GitHub запускает рабочий процесс CI, состоящий из заданий (проверки), которые вы определили. Каждое задание выполнило бы некоторую полезную задачу (запустить тесты, выполнить проверку стиля кода и т. Д.) и сообщить о результате.
Кроме того, к проверке изменений в коде, PR -рецензент проконсультируется с выводом сервера CI до объединения кода.
Действия GitHub бесплатны для общественных репозиториев, и у него есть щедрый бесплатный уровень для частных репо. Детали Здесь Анкет
Реальный рабочий процесс GitHub CI
Давайте создадим рабочий процесс CI, который будет запускать несколько чеков по каждому созданному запросу.
В частности, мы хотим, чтобы рабочий процесс выполнял эти задачи:
- Запустите компилятор Eslint и TypeScript для проверки синтаксиса кода и форматирования
- Запустить модульные тесты с шутками
- Запустите проверку безопасности, чтобы убедиться, что нет известных уязвимостей в зависимости, используемых в проекте
- Запустите проверку орфографии в документации
Как вы можете сказать, что все эти проверки применяются как к бэкэнд, так и к проектам.
GitHub ожидает, что определения рабочего процесса будут ниже .github/Workflows
папка. Создайте там новый файл. См. Комментарии в коде ниже для описания того, что делает соответствующий раздел.
name: CI on: [pull_request] # we want the workflow to trigger on commits to PRs only jobs: # each workflow consists of 1+ jobs; by default, all jobs run in parallel lint: # job name runs-on: ubuntu-latest # host's operating system steps: # each job consists of 1+ steps - name: Checkout commit # download the code from triggering commit uses: actions/checkout@v2 - name: Use Node.js uses: actions/setup-node@v1 with: node-version: '12.x' - name: Cache NPM # leverage npm cache on repeated workflow runs if package.json didn't change uses: actions/cache@v1 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - name: Install Dependencies run: npm ci - name: Run linter run: npm run lint security: # in this and following jobs, only the last step will be different runs-on: ubuntu-latest steps: - name: Checkout commit uses: actions/checkout@v2 - name: Use Node.js uses: actions/setup-node@v1 with: node-version: '12.x' - name: Cache NPM uses: actions/cache@v1 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - name: Install Dependencies run: npm ci - name: Run security check run: npm run audit-security test: runs-on: ubuntu-latest steps: - name: Checkout commit uses: actions/checkout@v2 - name: Use Node.js uses: actions/setup-node@v1 with: node-version: '12.x' - name: Cache NPM uses: actions/cache@v1 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - name: Install Dependencies run: npm ci - name: Run tests run: npm run test copy: runs-on: ubuntu-latest steps: - name: Checkout commit uses: actions/checkout@v2 - name: Use Node.js uses: actions/setup-node@v1 with: node-version: '12.x' - name: Cache NPM uses: actions/cache@v1 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - name: Install Dependencies run: npm ci - name: Run copy checks run: npm run check-copy
Это не совсем оптимально с точки зрения дублирования кода шага, но в настоящее время нет никакого способа обойти его, если мы хотим, чтобы задания сообщали в виде отдельных элементов на PR -странице. Обмен кодом рабочего процесса — это очень ждал характерная черта.
А вот сценарии, упомянутые в рабочем процессе. Примечание Некоторые команды сгруппированы в один вызов с NPM-Run-All
упаковка.
"scripts": { "lint:eslint": "eslint \"**/*.{ts,tsx}\" --max-warnings=0", "lint:tsc": "tsc --noemit", "lint:markdown": "markdownlint *.md", "lint": "run-p lint:*", "audit-security": "audit-ci --config ./audit-ci.json", "test": "jest --verbose", "check-copy:cspell": "cspell --config=.cspell.json **/*.md", "check-copy:language": "write-good *.md --no-passive", "check-copy": "run-p check-copy:*" },
И это все! Посоветуйте и протолкните файл yml в GIT. В следующий раз, когда вы создадите запрос на притяжение, он запустит рабочий процесс на Commits от этого PR. Вы можете продлить список чеков. На практике все, что вы можете запустить на сервере CI или в контейнере Docker, или при выполнении HTTP -запроса может быть частью рабочего процесса CI. Вы можете:
- Запустите функциональные тесты с Cypress
- Запустите проверку покрытия кода и сбой. Сборка, если процент ниже настроенного порогового значения
- Запустите визуальные регрессионные тесты (через наложения изображения)
- Запустить Аудит маяка
Вы можете найти файлы кода и конфигурации в Репо Анкет Проверьте PR -страницу, у нее есть примеры сбоя запросов на вытягивание при различных чеках.
Если вам нравится этот тип контента, вы могу Подписывайтесь на меня в Твиттере для последних обновлений.
Оригинал: «https://dev.to/maxivanov/code-and-security-checks-in-typescript-projects-with-github-actions-3jmg»