devops 2 (git merge, hyper-v, flask, CI/CD)

gosu·2024년 1월 5일
0
post-thumbnail
post-custom-banner

git

깃허브와 원격으로 연동

자격 증명

  • 검색 - 자격증명 관리자 - 일반 자격 증명 추가
    • 인터넷 주소 : git:https://github.com
    • 이름 : rimgosu
    • 암호 : 깃허브에서 받은 토큰

sourcetree에서 연동

  • 도구 - 옵션 - 인증
  • 원격! 클릭 후 저장소 연동할 수 있다. git remote add origin이랑 같은 역할을 할 수 있음.

깃허브 저장소 만들기👍

  • gitignore 탭에서 python, java 등 주 언어를 선택하면 자동으로 gitignore를 생성해준다

vs 코드 빠른 실행👍

  • 탐색기에서 cmd 검색
  • code . => vs 코드 폴더 선택하여 실행 할 수 있다.

octoverse

hyper-v ubuntu

검사점 만들기

  • 컴퓨터 끄기 - 우클릭 - 검사점 : 현 상태를 저장하는 스냅샷 만들기

복사 붙여넣기 설정

가상환경에서 깃허브 push👍

  • push 할 때 username, password를 요구한다.
  • 위의 "깃허브와 원격으로 연동" 메뉴를 참고하여 토큰을 발급받고, username에는 rimgosu, password에는 토큰을 넣으면 된다.
  • 다음 명령을 통해 한 번 인증하면 다음부터는 인증을 요구하지 않는 설정을 할 수 있다.
git config --global credential.helper cache

flask

flask 실행

from flask import Flask
app = Flask(__name__)

@app.route("/")
def home():
    return "Hello, Flask!"
  • 실행
    • host 지정을 0.0.0.0으로 해야 외부에서 접속 가능하다.
      컴퓨터의 모든 자원을 다쓰겠다는 의미.
    • http://127.0.0.1:5000 : 루프백 주소
    • http://172.23.253.76:5000 : 외부에서 접속 가능한 주소
$ python -m flask run --host=0.0.0.0 --port=5000
Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://172.23.253.76:5000
  • 가상환경에서 실행
python3 -m flask run --host=0.0.0.0 --port=5000
  • flask 기본 세팅
  • 다음 문구를 추가하면 된다.
if __name__ == '__main__':
    app.run('0.0.0.0', 5000, True)
$ python3 app.py

return 데이터 가져오기

$ curl 127.0.0.1:5000
Hello, Flask!

flask-snippets 설치

  • vs코드에서 flask-snippets 검색 후 설치하도록 하자.

WSGI Server ✅

  • python3 -m flask run --host=0.0.0.0 --port=5000 명령어로 실행하면 작은(개발자 전용) 서버를 배포해준다. 그럼으로 실제 배포에선 WSGI 같은 큰 서버에 배포를 해야한다.
WARNING: This is a development server. 
Do not use it in a production deployment. 
Use a production WSGI server instead.

Gunicorn

  • WSGI 서버 배포를 도와주는 녀석
  • 아파치 tomcat 같은 녀석임.

인바운드 규칙 편집 ✅

  • 시작 - 고급 보안이 포함된 Window Defender 방화벽 - 인바운드 규칙 - 새 규칙 - 5000번 포트 TCP 추가
  • 같은 와이파이 망 내에서 접속 가능하게 된다.

CI/CD

  • Continuous Integration/Continuous Delivery
  • 애플리케이션 개발 단계를 자동화하여 애플리케이션을 더욱 짧은 주기로 고객에게 제공
  • devops 툴 보여주는 사이트 : https://landscape.cncf.io/

github action

  • github - action - python application - configure

configuration

python-app.yml

# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python

name: Python application

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up Python 3.10
      uses: actions/setup-python@v3
      with:
        python-version: "3.10"
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install flake8 pytest
        if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
    - name: Lint with flake8
      run: |
        # stop the build if there are Python syntax errors or undefined names
        flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
        # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
        flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
    - name: Test with pytest
      run: |
        pytest
  1. runs-on: ubuntu-latest : 컴퓨터 하나 새로 생성한다는 의미
  2. uses: actions/checkout@v3 : checkout version 3 깃 클론으로 설치한다는 의미
  3. uses : action/setup-python@v3 : python 설치하라는 의미

github action 실습1

name: Python application

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: "3.8"
    - name: Display Python version
      run: python -c "import sys; print(sys.version)"

github action 실습2

name: Python application

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        python-version: ['3.6', '3.8']
        exclude:
          - os: macos-latest
            python-version: '3.8'
          - os: windows-latest
            python-version: '3.6'

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
    - name: Display Python version
      run: python -c "import sys; print(sys.version)"

docker

  • Dockerfile
# syntax=docker/dockerfile:1

FROM python:3.8-slim-buster

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY . .

EXPOSE 5000

CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]

docker hub

github action 실습3

  • Docker Build & Push Action
  • 커밋하면 자동으로 Docker 이미지 생성
name: Python application

on:
  push:
    branches: [ main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: "3.8"
    - name: Display Python version
      run: python -c "import sys; print(sys.version)"
    - name: Build & push Docker image
      uses: mr-smithers-excellent/docker-build-push@v5
      with:
        image: 도커허브 계정/github-actions-app
        tags: v3, latest
        registry: docker.io
        username: ${{ secrets.DOCKER_USERNAME }} # 또는 도커허브 계정
        password: ${{ secrets.DOCKER_PASSWORD }} # 또는 토큰

  • 커밋하면 바로 Docker hub 에 배포되는 것을 볼 수 있다.

젠킨스

젠킨스 설치

  • hyper-v 환경
  • jdk 설치
sudo apt-get install openjdk-11-jre
  • jdk : 개발자들이 필요한거 다 필요하다

  • jre : 경량화되어 프로덕션 배포때 이걸로 설치하면된다.

  • 젠킨스 설치(오류 발생)

$ wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
$ echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5BA31D57EF5975CA
$ sudo apt-get update
  • 설치 상태 보기
sudo systemctl status jenkins
  • 초기 비밀번호 보기
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

모니터링

profile
개발자 블로그 ^0^
post-custom-banner

0개의 댓글