github actions CI/CD
CI & CD
CICDの基本概念は
1. 지속적인 통합 2. 지속적인 서비스 제공 3. 지속적인 배포
である.アプリケーションの統合とテストから提供と導入まで、アプリケーションのライフサイクル全体で継続的な自動化と監視を実現
1. git push
2.github actionsでリモートリポジトリの変化を検出し、テスト光構築を行う.
3.問題がないと判断した場合は、導入します.
4.これらのサイクルはすべて開発者が判断し、作成します.
github actionsには基本的に提供されているテンプレート(時間を短縮し、開発を円滑にするために使用されています)がありますが、私は最初に使用したユーザーなので、googlingを通じてプロセス全体を理解し、書き直しました.
Build
name: Node.js CI
# 구독할 이벤트
on:
push:
branches: [main]
pull_request:
branches: [main]
# jobs 단위로 개별 서버(정확히는 Docker 컨테이너 단위라고 한다.)에서 작업이 수행된다.
# 각 작업은 병렬로 실행 된다고 하는데, needs: build와 같이 표시해서 기다릴 수도 있다.
jobs:
build:
# Ubuntu, Windows, MacOS를 지원한다.
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x] # 템플릿 기본값: [10.x, 12.x, 14.x]
# uses 개념은 다른 사람이 작성한 내용을 실행하는 개념이다.
# actions/checkout: GitHub의 마지막 커밋으로 Checkout 한다.
# actions/setup-node: Node.js를 설치한다.
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
# npm ci === npm install
- run: npm ci --prefix /yeomanda/yeomanda/server
# --if-present 옵션은 npm 스크립트가 존재할 때만 실행시키라는 의미이다.
# 만약 build 스크립트가 없는 경우, 오류 없이 지나간다.
- run: npm run build --if-present --prefix /yeomanda/yeomanda/server
- run: npm run test --prefix /yeomanda/yeomanda/server
Deploydeploy:
needs: [build]
runs-on: ubuntu-latest
steps:
- name: connect with ssh
env:
PRIVATE_KEY: ${{ secrets.AWS_PRIVATE_KEY }}
HOST_NAME : ${{ secrets.HOST_NAME }}
USER_NAME : ${{ secrets.USER_NAME }}
run: |
echo "$PRIVATE_KEY" > private_key
chmod 600 private_key
ssh -o StrictHostKeyChecking=no -i private_key ${USER_NAME}@${HOST_NAME} '
pm2 stop www
pm2 delete www
pm2 kill
cd ./repo/yeomanda
git pull origin main
cd yeomanda/server
pm2 start ./bin/www
'
ここで大切なのはグーグルを試してみましたが、みんな違う方法で
env
を発表しました.その方法が一番きれいで正確です.github repositoryのSettingsタブでは、左側に上図に示す複数のカテゴリがあります.このうち
Secrets 카테고리
は、予め変数を設定している.それらの変数は一度設定すると読み込めません.更新したいならスペースが出るので安全と言えます.AWS_PRIVATE_KEY
| vi path_to_key_pair/[ssh_key].pem
at localec 2インスタンスを作成してssh鍵を提供します.pemファイルを保存し、ファイルを保存する場所でviでファイルを開きます.きっと.
私はcatで開けて、それからずっと
ssh connection timed out
に行きました. HOST_NAME
&24579142|ec 2インスタンスを生成し、sshを接続する方法はUSER_NAME
であることがわかる.ここから抽出すればいいです.**bachrcファイルでaliasとして宣言し、インポート中に問題が発生しました.
[script_to_run_nohup_but_not_working]
stop_list=$(ps -ef | grep "node ./bin/www" | awk '{print $2}')
for stop_target in ${stop_list};do
kill -9 $stop_target
done
cd ./repo/yeomanda
git pull origin main
cd yeomanda/server
npm install
npm run start
nohupLinux上でプロセスを実行する端末がセッション接続を切断したときに実行を続行できるコマンド.
デフォルトでは、セッションログアウトが端末で発生した場合、Linuxはその端末で実行されているプロセスにHUP信号を送信し、終了します.
Nohupは、プロセスがこのHUP信号を無視できるようにするコマンドです.
このスクリプトを実行すると、結果はログに書き込まれ、ログは
ssh -i [.pem file] [USER_NAME]@[HOST_NAME]
で同じ場所で生成されます.データが多すぎると、ディスクがオーバーロードする可能性があるので、不要なデータ蓄積を避けるのも方法です.nohup.out
ファイルを生成したくない場合は、nohup.out
と同じ方法で実行できます.1>/dev/nullは標準出力を使用しないことを示し、2>&1は標準エラーを標準出力と同じにすることを示します.
出典:https://gracefulprograming.tistory.com/128[peterエレガントなプログラミング]
Background
なぜec 2 instanceを使うのか
リソースが限られており、PCをずっと開いているわけにはいかないので、仮想パソコンは私たちが借りています.もしそうであれば、インスタンスに接続して端末を閉じるか、pcの電源を切るか、どうすればいいですか.
nohup [프로세스] 1>/dev/null 2>&1 &
最終的には、端末とpcが電源を入れるかどうかにかかわらず、24時間サーバを駆動します.これは通常、의미가 없다
と呼ばれています.👏
これは、sshバインドインスタンスをローカルで使用し、サーバを通常の
백그라운드로 서버를 돌린다
に変換する場合に、サーバをバックグラウンドに変換する方法です.そのため、端末がオフになると、サーバも切断されます.最終的には、サーバをバックグラウンドに配置する必要がありますが、使用するパッケージでは、
npm run start
で起動するのはよくありません.forever
です.$ npm install -g pm2@latest
$ pm2 start app.js//app.jss psの実行
$ pm2 stop app.js//app.jss psを停止
$ pm2 delete app.js//app.js psの削除
$pm 2 kill//pm 2掛け
https://github.com/jjmmll0727/yeomanda/blob/main/.github/workflows/nodejs.yml
Reference
この問題について(github actions CI/CD), 我々は、より多くの情報をここで見つけました https://velog.io/@jaymee/github-actions-CICDテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol