Рубрики
Uncategorized

Личные заметки: делая Gitlab CI CD В моем грязном пути

Я собирался настроить CD Gitlab CI CD, а также хотел автоматически сделать резервную копию базы данных … Помечено Gitlab, CICD, AWS, DEVOPS.

Я собирался настроить CD Gitlab CI CD, а также хотел автоматически выполнять резервное копирование базы данных, так как сейчас я использую на месте MySQL (установленный внутри моего EC2). Я называю это «грязным», потому что я не знал, как это сделать правильно, я не знал, как компании настроили это. Я никогда не работал в Tech Giants, никогда не работал на Faang.

Резервное копирование базы данных

Наличие базы данных, установленной на экземпляре EC2, была моей заботой, я боюсь потерять данные, чтобы надо отступить вручную вручную каждый день, и я устал от этого.

Так что в основном нужно SSH на сервер и делал вручную

mysqldump -u USER -p PASS --opt --routines --skip-extended-insert --force "DB_NAME" > ""

Я создал скрипт, чтобы автоматизировать его. Я использую Git Repository для хранения файлов dum db. Используйте CROWJOB/CRONTAB, чтобы постоянно запустить скрипт.

Таким образом, концепция в основном я устанавливаю CRON для проведения каждые 1 час> чистого рабочего ветвления с Git Checkout. > Получить последние изменения Git, если какой-либо> дамп БД> Нажмите на REPO.

Так вот мой грязный скрипт, который я скопировал из другого источника.

#!/bin/bash

##
# MySQL DB dump to Git commit
# 
# Dumps the specified mysql database to the given location and commits it and
# the previous database to the Git repository.
#
# It is assumed you have already setup the Git respository to only be the 
# a checkout of the database backup location
# 
# To do that (in the repository): 
# $ git config core.sparsecheckout true
# $ echo sql-backup/ > .git/info/sparse-checkout
# $ git read-tree -m -u HEAD
#
# Author:   Aaron Gustafson, Easy-Designs LLC
# Copyright:    Copyright (c) 2011 Easy-Designs LLC
# Since:    Version 0.1
##

# init SSH agent
eval $(ssh-agent -s)

# add your private key
ssh-add ~/.ssh/id_rsa

# path to Git repository
REPO_PATH="~/backup-database"
REPO_BRANCH="master"

# database settings
DB_NAME="DB NAME"
DB_USER="root"
DB_PASS="PASS"

FILENAME=${DB_NAME}"_new".sql
NOW=$(date +"%b%d-%Y-%H%M%S")


# clear all changes
git checkout .

# svn up the content
# cd $REPO_PATH
git pull --quiet

# dump the database using the mysql administrator - so we can see all dbs
mysqldump -u$DB_USER -p$DB_PASS --opt --routines --skip-extended-insert --force "${DB_NAME}" > "${FILENAME}"

# add everything we have - will throw a warning the dbname.sql already is added but its fine
git add .
# commit
git commit --quiet -m "SQL Database Dump "$NOW
# push
git push --quiet origin $REPO_BRANCH

О, перед запуском этой скрипки, создайте репо, чтобы сохранить DB Dump. Мое репо, состоит из некоторых файлов, DB Dump, DB Backup Script, index.js для запуска cronjob oddjs.

|- db_backup.sql
|- index.js
|- backup.sh
|- package.json

Теперь мы движемся. Создать id_rsa На сервере/VPS/EC2 с PASHPHALESELED (без Passphase) для аутентификации с GitLab.

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Не забудьте добавлять его в autorized_keys. . Cat ~/.ssh/id_rsa.pub >> ~/.ssh/averized_keys . Если вы не сделаете это, все в порядке 🙃.

Добавьте его к ключам Gitlab SSH https://gitlab.com/-/profile/keys . Добавьте свои открытые ключи. Cat ~/.ssh/id_rsa.pub Затем скопируйте его и вставьте в Gitlab.

Теперь я могу запустить Cronjob для автоматической резервной копии базы данных.

Постановка Gitlab CI CD к AWS EC2

Пожалуйста, игнорируйте, если вы не видите тест здесь 😂. Не говори никому 😂.

Это было расстраивает, потратил 8 часов, чтобы он работал, наконец, мне удалось сделать это.

Все похоже на шаг выше (резервная копия БД). Создайте пару ключей SSH PASSPHALELES.

Не забудьте добавлять его в autorized_keys. . Cat ~/.ssh/id_rsa.pub >> ~/.ssh/averized_keys . Этот вам нужно добавить его 😇.

Добавьте его к ключам Gitlab SSH https://gitlab.com/-/profile/keys . Добавьте свои открытые ключи. Cat ~/.ssh/id_rsa.pub Затем скопируйте его и вставьте в Gitlab.

O Ya, для этого случая моя база данных Backup Server отличается с сервером CI CI Поэтому мне нужно создать новую пару ключей SSH.

Выглядит хорошо, на следующие шаги.

CICD в GitLab, мне нужно создать файл YML в корневом каталоге моего репо.

Я следовал Эта статья с моей собственной модификацией.

Не забудьте добавить Deploy_Servers и Частный ключ для переменной CD GitLab CI.

Deploy_servers. IP-сервер

Private_key SSH Частный ключ, который я создал на шаге выше.

.gitlab-ci.yml.

# Node docker image on which this would be run
image: node:14.5.0

#This command is run before actual stages start running
before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - npm i
    - echo $DEPLOY_SERVERS

stages:
    - test
    - deploy

lint: 
    stage: test
    script:
        - npm run prettier

deploy-stage: 
    image: node:14.5.0
    only: 
        - staging-dev
    stage: deploy
    script:
        - bash deploy/deploy.sh

Смотри нет теста Кан 🤣?

Я понятия не имел, что поставить в Тест сцена Так что я положил красивее там.

Я только хочу развертывать этап, когда есть толкающий Подвеска

deploy.sh

#!/bin/bash

# any future command that fails will exit the script
set -e

# add private key to .pem file
echo  -e "$PRIVATE_KEY" > stage.pem
chmod 600 stage.pem

# disable the host key checking.
chmod +x ./deploy/disableHostKeyChecking.sh
./deploy/disableHostKeyChecking.sh

ssh -i "stage.pem" ubuntu@$DEPLOY_SERVERS 'bash -s' < ./deploy/updateAndRestart.sh

disableHostKeyChecking.sh

# This the the prompt we get whenever we ssh into the box and get the message like this
#
# The authenticity of the host 'ip address' cannot be verified....
#
# Below script will disable that prompt

# note ">>". It creates a file if it does not exits.
# The file content we want is below
#
# Host *
#   StrictHostKeyChecking no
#

# any future command that fails will exit the script
set -e
mkdir -p ~/.ssh
touch ~/.ssh/config
echo -e "Host *\n\tStrictHostKeyChecking no\n\n" >> ~/.ssh/config

updateAndRestart.sh

#!/bin/bash

# any future command that fails will exit the script
set -e

cd /home/ubuntu/staging-api

# init SSH agent
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

git checkout .

git pull gitlab staging-dev

echo which node
echo which npm
echo which pm2

PATH="/home/ubuntu/.nvm/versions/node/v14.5.0/bin:$PATH";

echo "RUN INSTALL DEPS"

# /home/ubuntu/.nvm/versions/node/v14.5.0/bin/npm i
npm i

echo "RESTART PM2"

# /home/ubuntu/.nvm/versions/node/v14.5.0/bin/pm2 restart all
pm2 restart all

Если я удалю PATH = "/HOME/UBUNTU/.NVM/VERSIONS/NODE/V14.5.0/BIN: $ PATH"; они не узнают NPM и PM2 команда. Так что надо это иметь. использовать Какой NPM или/и Какой PM2 знать, где ваш NPM и PM2 Команда расположена.

Так что я думаю, что это должно работать сейчас.

Оригинал: «https://dev.to/burhanahmeed/personal-notes-doing-gitlab-ci-cd-in-my-dirty-way-4okl»