Я собирался настроить 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»