Вы хотите настроить конвейер CI/CD для своего репозитория GitHub, который будет автоматически развертывать ваши файлы сборки на вашем сервере каждый раз, когда вы отправляете код в определенную ветку?

Этот блог станет вашим приветствием! в мире DevOps.

Введение

Действия GitHub будут иметь файл .yaml, который обеспечит выполнение определенных команд при отправке кода.

В этом примере он войдет на ваш сервер с помощью ключей SSH и скопирует код на ваш сервер.

Это также создаст ваш интерфейс и запустит ваш сервер, если это необходимо.

1. Создайте пару ключей SSH

Я делаю это в Windows, но то же самое можно сделать в Linux и Mac.

а) Загрузите и установите PuTTYgen здесь

б) Откройте PuTTYgen и сгенерируйте ключ, наведя указатель мыши на пустую область.

c) Сохраните открытый ключ и закрытый ключ

г) Экспортируйте закрытый ключ как ключ OpenSSH.

2. Скопируйте открытый ключ на свой сервер Ubuntu.

а) SSH на ваш сервер, где будет развернут ваш код (проект).

б) создать новый файл

sudo nano ~/.ssh/authorized_keys

в) Скопируйте содержимое открытого ключа в это и сохраните его

2. Войдите через SSH-ключ вместо пароля

а) Откройте PuTTY и введите IP-адрес

б) Загрузите закрытый ключ, который вы сохранили на шаге 1с.

c) Нажмите «Открыть» и войдите под своим именем пользователя.

Если вы успешно вошли в систему без пароля, ваши SSH-ключи работают.

3. Настройте секреты GitHub

Секреты действий GitHub подобны вашим переменным среды.

HOST : <Server IP Address>
KEY: Copy contents of exported SSH private key
PORT : 22
TARGET: <location inside server where you want to deploy>

4. Настройка действий GitHub

Перейдите в свой репозиторий и перейдите к действиям, создайте новый рабочий процесс.

Здесь я развертываю веб-приложение React. Есть два репозитория Frontend и Backend. Для каждого репозитория есть рабочие процессы.

Скопируйте их в соответствующие рабочие процессы.

#FRONTEND 
name: Build React Files & Deploy to Ubuntu server

on:
  push:
    branches: [ prod ]
  pull_request:
    branches: [ prod ]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js 14.x to Build
      uses: actions/setup-node@v2
      with:
        node-version: 14.x
        #cache: 'npm'
    - run: npm install
    - run: REACT_APP_STAGE=production
    - run: CI=false npm run build
    - name: ssh deploy on aws ec2
      uses: easingthemes/[email protected]
      env:
        SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_KEY_PROD }}
        REMOTE_HOST: ${{ secrets.DEPLOY_HOST_PROD }}
        REMOTE_USER: ${{ secrets.DEPLOY_USER_PROD }}
        REMOTE_PORT: ${{ secrets.DEPLOY_PORT_PROD }}
        SOURCE: "build/"
        TARGET: ${{ secrets.DEPLOY_TARGET_PROD }}
#BACKEND
name: Node Github CI to Deploy on AWS Server

on:
  push:
    branches:
      - prod

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: ssh deploy on aws ec2
      uses: easingthemes/[email protected]
      env:
        SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_KEY_PROD}}
        REMOTE_HOST: ${{ secrets.DEPLOY_HOST_PROD }}
        REMOTE_USER: ${{ secrets.DEPLOY_USER_PROD }}
        REMOTE_PORT: ${{ secrets.DEPLOY_PORT_PROD }}
        SOURCE: "./"
        TARGET: ${{ secrets.DEPLOY_TARGET_PROD }}
        
  deploy:
    runs-on: ubuntu-latest
    needs: [build]

    steps:
      - name: Configure SSH
        run: |
          mkdir -p ~/.ssh/
          echo "$SSH_KEY" > ~/.ssh/staging.key
          chmod 600 ~/.ssh/staging.key
          cat >>~/.ssh/config <<END
          Host staging
            HostName $SSH_HOST
            User $SSH_USER
            IdentityFile ~/.ssh/staging.key
            StrictHostKeyChecking no
          END
        env:
          SSH_USER: ${{ secrets.DEPLOY_USER_PROD }}
          SSH_KEY: ${{ secrets.DEPLOY_KEY_PROD }}
          SSH_HOST: ${{ secrets.DEPLOY_HOST_PROD }}
      - name: Build and Run App
        run: ssh staging 'cd /root/app/backend; npm install ; pm2 stop backend ; pm2 delete backend ; pm2 start index.js --name "backend"'

Когда вы зафиксируете это изменение, ваше действие Github автоматически запустит новый рабочий процесс, и вы сможете проверить его ход.

5. Отключить вход по паролю (ДОПОЛНИТЕЛЬНО)

Теперь ключ SSH используется по умолчанию для входа в систему, но если вы не хотите, чтобы хакеры взломали и нашли ваш пароль, вы можете отключить вход по паролю.

Чтобы отключить аутентификацию по паролю, отредактируйте файл /etc/ssh/sshd_config на удаленном сервере. Выполните короткий шаг здесь.

Теперь вы можете настроить конвейер CI/CD для таких серверов, как Digital Ocean, AWS EC2, Contabo и т. д.

Ваш дружелюбный сосед, разработчик,
Ниби Мауриян