기존까지의 내용은 토큰을 기반으로 push
SSH 키를 만들어 두면 github뿐만 아니라 ssh를 사용하는 사이트에 함께 사용가능
계정에 Setting에 들어간다음 SSH and GPG keys
우선 SSH키 존재 여부에 대해 확인해야 함
없다면 생성
ssh-keygen -t ed25519 -C "(이메일 주소)"
만든 후 조회해 보았을 때 pub이 붙은것이 공개키, 안 붙은것이 비밀키
GitHub에 키 등록하기
위와 같은 방식으로 컴퓨터의 공개키를 github에 등록하면, 본인 및 특정 누군가가 인증을 진행할때 개인키와 공개키가 맞아 떨어지는지 확인하고 승인을 해줌
기존 HTTTP 기반의 원격저장소를 SSH로 바꾼후, 커밋이 되는 것을 확인
어떠한 커밋에는 verified가 붙어있는 반면, 어떠한 커밋에는 붙어있지 않음
-> 깃헙 자체에서 수정하고 커밋한 커밋들에 verified가 붙어 있음
Verified
: 신뢰할 만한 출처에서 커밋되었다는 인증
Settings 에서 GPG 키 생성하기
-> 우선 brew install gnupg
gpg --full-generate-key
생성시 real name은 깃헙 계정 이름으로
이후 passphrase 창에서 암호 지정
gpg --list-secret-keys --keyid-format=long
를 통해 만들어 진 것 확인
이후 sec에서 암호 타입 뒤에 있는 문자열 복사(복사1)
gpg --armor --export (위에서 복사한 문자열)
위에서 나온 결과값 또한 복사(복사2)하고 이를 깃헙에 붙여넣어 GPG 키 완성
이후 GPG 키를 깃에게 알려주어야 함
git config --global user.signingkey 복사1 키값
if [ -r ~/.zshrc ]; then echo 'export GPG_TTY=$(tty)' >> ~/.zshrc; \
else echo 'export GPG_TTY=$(tty)' >> ~/.zprofile; fi
이후 커밋할때
git commit -S -am '메세지'
ex) export GPG_TTY=$(tty) -> 비밀 번호 창이 안떠서 추가함
git commit -S -am 'sign commit'
정상적으로 커밋이 verified 됨
태그에 사인을 하고 싶은 경우
git tag -s (태그명) (커밋 해시) -m (메시지)
예전엔 Jenkins 많이 사용
CI/CD : 지속적 통합과 배포
-> 동종: GitLab CI/CD, BitBucket Pipelines
젠킨스, Travis CI, Github Actions
CI(Continuous Integration)
: 지속적 통합
CD(Continuous Deploymet)
: 지속적 배포
최종 배포 과정에서 진행하는 일
Git 에서 여러 개발자들의 코드를 merge 하기 전에 작성한 코드에 문제가 없는지 확인하는 과정이 없으면 실제 서비스를 배포되고 나서 문제가 발생할 수 있음
-> ex) 코드 자체 문제, 합쳤을 때 엇갈리는 코드
-> 큰 프로젝트를 수작업으로 일일히 테스트하기는 힘듬
-> 이를 해결하기 위해 통합 작업을 수시로,지속적으로 하게 해야하는데 이때마다 테스트 과정을 매번 거치기는 번거로움
-> 자동화의 필요성(CI 의 자동화를 위한 많은 도구와 서비스)
배포
란 소프트웨어를 코딩한 결과를 최종 사용자에게 넘겨주는, 즉 실행 가능하도록 하는 단계
CI/CD 자동화를 위한 툴
CI
(클라우드형 서비스)깃헙 블로그 리포지토리에 푸쉬를 진행한 후 보면
Actions이 추가되어있고 자동으로 코드 내용을 확인한후 배포까지 하여 적용된것을 볼 수 있음
github.io와 다르게 그냥 프로젝트는 actions 등록을 해주어야 함
어떤 종류의 자동화를 하고싶은지 선택하게 됨
-> 프로젝트에 맞는 워크플로우 선택 후 yml 작성
# This is a basic workflow to help you get started with Actions
name: CI
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the "main" branch
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
# Runs a single command using the runners shell
- name: Run a one-line script
run: echo Hello, world!
# Runs a set of commands using the runners shell
- name: Run a multi-line script
run: |
echo Add other actions to build,
echo test, and deploy your project.
on에는 어떤것에 반응 할지 명시
-> push나 pull_request가 main 브랜치로 가는 것일 때 자동화 진행
job에는 어떤것들을 실행할지
-> 깃헙이 코드를 어디서 작업할지 (ubuntu-latest)
작업 내용 작성 후 커밋 시
workflow 폴더가 생김
로컬에서 작성해서 푸시 해도됨
js 파일은 값이 홀수인 경우 오류
깃헙에 PR을 날렸을 때, 깃헙에서 위 테스트를 진행한 후 오류가 발생하는 경우 자동으로 PR을 취소해준다고 가정
test.yml
name: Node.js CI
on:
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest ## 우분투 가상공간에서 작업 진행
strategy:
matrix:
node-version: [12.x, 14.x, 16.x] ## 해당 버전들에서 호환이 안되는 경우도 테스트 실패
steps:
- uses: actions/checkout@v2
- name: Execute text
run: npm test
- name: if fail
uses: actions/github-script@0.2.0
with:
github-token: ${{github.token}}
script: |
const ref = "${{github.ref}}"
const pull_number = Number(ref.split("/")[2])
await github.pulls.createReview({
...context.repo,
pull_number,
body:"테스트가 실패했습니다.",
event: "REQUEST_CHANGES"
})
await github.pulls.update({
...context.repo,
pull_number,
state: "closed"
})
if: failure() ## 테스트가 실패한 경우 메세지를 담아 해당 PR을 자동으로 close
이후 새 브랜치를 만든 후 값을 101로 바꾼후 push
이후 PR을 만들고 Actions를 확인하면 작업이 돌아감
-> fail이 뜸
실패 후 pr이 closed에 위치
값을 짝수로 하였을 때는 정상으로 PR 반영
브라우저에서는 복잡한 프로젝트 구조를 보기 어려움(finder 같은 것이 생김)
깃헙 전용 CLI 툴