개인 메모: 내 더러운 방식으로 Gitlab CI CD 만들기
데이터베이스 백업
EC2 인스턴스에 데이터베이스를 설치하는 것이 내 관심사였습니다. 데이터 손실이 두려워 매일 수동으로 백업해야 하고 지겹습니다.
따라서 기본적으로 서버에 SSH가 필요하고 수동으로 수행했습니다.
mysqldump -u USER -p PASS --opt --routines --skip-extended-insert --force "DB_NAME" > "<FILE NAME>"
자동화하는 스크립트를 만들었습니다. Git 저장소를 사용하여 DB 덤프 파일을 저장하고 있습니다. cronjob/crontab을 사용하여 스크립트를 계속 실행합니다.
그래서 개념은 기본적으로 cron이 1시간마다 실행되도록 설정하고 > clean working branch with
git checkout .
> 최신 git 변경 사항이 있는 경우 가져오기 > dump db > push to 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 덤프를 저장할 저장소를 만드십시오. 내 저장소는 Nodejs cronjob을 실행하기 위한 일부 파일, db dump, db 백업 스크립트, index.js로 구성됩니다.
|- db_backup.sql
|- index.js
|- backup.sh
|- package.json
이제 이동합니다. Gitlab 인증을 위해 passphaseless(passphase 없음)로 server/VPS/EC2에 생성
id_rsa
합니다.ssh-keygen -t rsa -b 4096 -C "[email protected]"
authorized_keys
에 추가하는 것을 잊지 마십시오. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
. 🙃 이거 안 하면 안 돼.Gitlab SSH KEYShttps://gitlab.com/-/profile/keys에 추가합니다. 공개 키를 추가합니다.
cat ~/.ssh/id_rsa.pub
그런 다음 복사하여 Gitlab에 붙여넣습니다.이제 데이터베이스 백업을 자동으로 수행하기 위해 cronjob을 실행할 수 있습니다.
Gitlab CI CD를 AWS EC2로 스테이징
여기에 테스트가 없으면 무시하십시오 😂. 아무한테도 말하지마 😂 .
그것은 실망스러웠고, 그것을 작동시키기 위해 8시간을 보냈고, 마침내 나는 그것을 할 수 있었습니다.
모든 것은 위의 단계(db 백업)와 유사합니다. passphaseless SSH KEY 쌍을 만듭니다.
authorized_keys
에 추가하는 것을 잊지 마십시오. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
. 이건 꼭 추가하셔야 합니다 😇.Gitlab SSH KEYShttps://gitlab.com/-/profile/keys에 추가합니다. 공개 키를 추가합니다.
cat ~/.ssh/id_rsa.pub
그런 다음 복사하여 Gitlab에 붙여넣습니다.예, 이 경우 내 데이터베이스 백업 서버가 이 CICD 서버와 다르기 때문에 새 SSH KEY 쌍을 생성해야 합니다.
좋아 보입니다. 다음 단계로 넘어갑니다.
Gitlab의 CICD를 사용하려면 내 repo의 루트 디렉터리에 YML 파일을 만들어야 합니다.
나는 내 자신의 수정으로 this article을 따랐다.
Gitlab CICD 변수에
DEPLOY_SERVERS
및 PRIVATE_KEY
를 추가하는 것을 잊지 마십시오.DEPLOY_SERVERS = my ip server
PRIVATE_KEY = my SSH private key which I created in step above.
.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
노테스트kan 🤣?
test
스테이지에 뭘 넣어야할지 몰라서 prettier
거기에 넣었습니다.staging-dev branch
에 푸시가 있을 때만 배포 단계를 실행하고 싶습니다.배포.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
명령을 인식하지 못합니다. 그래서 그것을 가질 필요가 있습니다. which npm
또는 which pm2
를 사용하여 npm
및 pm2
명령이 있는 위치를 확인하십시오.그래서 나는 그것이 지금 작동해야한다고 생각합니다.
Reference
이 문제에 관하여(개인 메모: 내 더러운 방식으로 Gitlab CI CD 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/burhanahmeed/personal-notes-doing-gitlab-ci-cd-in-my-dirty-way-4okl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)