Рубрики
Uncategorized

Действия GitHub: тестирование, строительство и уведомление

В предыдущей статье мы обсуждали, как улучшить ваш рабочий процесс CI/CD, используя действия GitHub. Сегодня мы … с меткой Docker, Kubernetes, DevOps, GitHub.

В предыдущей статье мы обсуждали Как улучшить свой CI/CD Рабочий процесс с использованием действий GitHub. Сегодня мы идем на шаг вперед. Мы будем работать с некоторыми дополнительными действиями для проверки нашей заявки, прежде чем отправить изображение Docker и отправить уведомление на канал Slack.

Во -первых, нам нужно создать ваше действие GitHub, используя путь «Наш repository_name»/ .github / рабочие процессы / и создайте наш файл рабочего процесса. Для этого урока мы собираемся развернуть приложение Node.js, поэтому мы начнем с выбора шаблона Node.js для работы, как показано ниже.

После нажатия на Установите этот рабочий процесс новый файл nodejs.yml создан в нашем репозитории со следующим контентом:

 name: Node.js CI

    on: [push]

    jobs:
      build:

        runs-on: ubuntu-latest

        strategy:
          matrix:
            node-version: [8.x, 10.x, 12.x]

        steps:
        - uses: actions/checkout@v2
        - name: Use Node.js ${{ matrix.node-version }}
          uses: actions/setup-node@v1
          with:
            node-version: ${{ matrix.node-version }}
        - run: npm install
        - run: npm run build --if-present
        - run: npm test
          env:
            CI: true

По умолчанию он собирается построить три разных версии, используя 8.x, 10.x и 12.x, работающий на Ubuntu, и поиск нашего Package.json в корневом каталоге.

Мы собираемся сохранить путь по умолчанию и построим приложение с помощью версии 13.x вместе с установкой Jest для целей тестирования. Другие строки останутся неизменными, за исключением имени действия Node.js тест, строить и уведомлять :

 name: Node.js Test, Build and Notify

    on: [push]

    jobs:
      build:

        runs-on: ubuntu-latest

        strategy:
          matrix:
            node-version: [13.x]

        steps:
        - uses: actions/checkout@v2
        - name: Use Node.js ${{ matrix.node-version }}
          uses: actions/setup-node@v1
          with:
            node-version: ${{ matrix.node-version }}
        - run: npm install jest --save-dev
        - run: npm run build --if-present
        - run: npm test
          env:
            CI: true

Если у вас есть собственный код приложения Node.js, вам придется изменить тестовую строку в раздел Scripts для «Тест»: «шутка» на вашем package.json

В нашем примере Package.json это окончательный код:

{
      "name": "docker-githubactions",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "jest"
      },
      "author": "Pablo Ponce",
      "license": "ISC",
      "dependencies": {
        "express": "^4.17.1"
      }
    }

Далее нам придется создать наши тестовые файлы. Согласно требованиям, мы собираемся создать тестовые файлы, используя filename.spec.js и хранить их в SRC / тест /

Мы собираемся установить глупая чек Для демонстрационных целей оценка, если два числа равны. Мы назвали файл test.spec.js Но соответствующая точка — путь (все файлы тестирования должны быть включены в src / test / )

  describe("Testing our nodeJS app", () => {
      it("Testing using Github Actions", () => {
        expect(2).toBe(2);
      });
    });

Если тест будет успешным, мы добавим новый шаг в наше действие, чтобы создать собственное изображение Docker. Нам понадобится Dockerfile, определенный в нашем корневом каталоге, чтобы построить наше приложение с помощью Docker на основе Node.js 13:

 FROM node:13

    EXPOSE 3000

    WORKDIR /usr/src/app

    COPY package.json package.json

    RUN npm install

    COPY --chown=node:node . .

    CMD [ "node", "index.js" ]

Хотя наше приложение node.js является файлом index.js, вы должны адаптировать Dockerfile с вашими собственными требованиями:

 //Load express module with `require` directive
    var express = require('express')
    var app = express()

    //Define request response in root URL (/)
    app.get('/', function (req, res) {
      res.send('It works!')
    })

    //Launch listening server on port 3000
    app.listen(3000, function () {
      console.log('Keep working!')
    })

После этого мы можем отредактировать наш nodejs.yml и добавьте действие Docker, сделанное Elgohr Анкет Важным моментом является установка условного «если», чтобы гарантировать выполнение, только если предыдущий шаг был успешным:

    - name: Publish Docker
          if: success()
          uses: elgohr/Publish-Docker-Github-Action@2.11
          with:
            # The name of the image you would like to push
            name: cloudblog/nodejs_githubactions
            # The login username for the registry
            username: ${{ secrets.DOCKERHUB_USER }}
            # The login password for the registry
            password: ${{ secrets.DOCKERHUB_PASS }}

Примечание: вам нужно переименовать изображение, используя формат yourdockeruser/image_name_of_your_app

Если все работает нормально, у нас должен быть новый репозиторий на нашем концентраторе Docker с нашим изображением контейнера:

Кроме того, нам нужно было бы отправить уведомление на слабый канал, когда сборка завершена и завершена правильно. Та же процедура, что и раньше, нам нужно включить новый шаг, который будет выполнен только в том случае, если предыдущий шаг был завершен без ошибок.

Для уведомления о Slack нам нужно использовать входящие веб -крючки для приложения Slack в нашем рабочем пространстве. Мы также можем переопределить конфигурацию по умолчанию из веб -крючка, как связанный канал.

Здесь мы используем настройки по умолчанию, когда создали WebHook, но записываем конкретное сообщение, которое будет отправлено на наш #General Channel с текстом «Новая версия вашего приложения Node.js была построена»

- name: GitHub Action for Slack
          if: success()
          env:
           SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
          uses: Ilshidur/action-slack@1.6.2
          with:
           args: 'A new version of your Node.js app has been built'

После выполнения этот вывод отправляется на наш канал Slack #General:

Это сообщение будет отправлено только тогда, когда все предыдущие шаги будут выполнены без ошибок. Когда тесты в нашем коде успешно пройдут, мы получаем что -то вроде:

Включая все настроенные тесты, прошедшие как и ожидалось:

Однако обратите внимание, что даже если один тест не пройдет, рабочий процесс прекращается, и дальнейшие действия не будут выполнены. Если мы изменим наш образцы тестирования для оценки 3 против 2, тест пройдет сбой, и, следовательно, следующие шаги — сборка Docker, загрузить в Docker Hub и уведомление канала Slack — не будет выполнено.

Здесь мы можем увидеть, как дальнейшие шаги не выполняются после сбоя теста:

Причина неудачного теста ясна, мы ожидали «2», но мы получаем «3» от нашей функции:

Наш последний nodejs.yml Файл будет выглядеть так же, как это:

name: Node.js Test, Build and Notify

    on: [push]

    jobs:
      build:

        runs-on: ubuntu-latest

        strategy:
          matrix:
            node-version: [13.x]

        steps:
        - uses: actions/checkout@v2
        - name: Use Node.js ${{ matrix.node-version }}
          uses: actions/setup-node@v1
          with:
            node-version: ${{ matrix.node-version }}
        - run: npm install jest --save-dev
        - run: npm run build --if-present
        - run: npm test
          env:
            CI: true

        - name: Publish Docker
          if: success()
          uses: elgohr/Publish-Docker-Github-Action@2.11
          with:
            # The name of the image you would like to push
            name: cloudblog/nodejs_githubactions
            # The login username for the registry
            username: ${{ secrets.DOCKERHUB_USER }}
            # The login password for the registry
            password: ${{ secrets.DOCKERHUB_PASS }}


        - name: GitHub Action for Slack
          if: success()
          env:
           SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
          uses: Ilshidur/action-slack@1.6.2
          with:
           args: 'A new version of your Node.js app has been built'

Подобные действия могут быть выполнены с использованием других языков, и, следовательно, не только связаны с Node.js. Тестирование вашего кода (синтаксис или реальный вывод) до продолжения дополнительных действий — это действительно хорошая практика для поддержания здоровья вашего конвейера CI/CD. Продолжайте копать на рынке GitHub, чтобы обнаружить больше шагов, которые должны быть включены в ваш рабочий процесс.

Оригинал: «https://dev.to/appfleet/github-actions-testing-building-and-notifying-52c1»