Travis CI 및 Python을 사용하여 CI/CD 소개
무미건조한 작업 자동화(CI), CD(연속 배포)
Travis CI를 처음 알게 된 것은 모험을 통해 GitHub에 들어가 몇 개의 개원 프로젝트를 보는 것입니다.나는 그들이 모든 제출, 지점, 추출 요청에 코드를 테스트하기 위해 연속적인 통합 작업 흐름을 설정하는 방법을 보았다.
That seemed so convenient so I went off to try it myself.
I've documented what I've learned below to help get you started!
지속적인 통합 서비스 선택
Python3 CI/CD 파이핑을 생성할 때 고려해야 할 문제
GitHub의 Python 커뮤니티 - 모든 python3 지원🐍 버전
테스트 프레임워크 선택 - 유행하는 테스트 프레임워크:pytest,unittest 등에 사용합니다.
소스 오픈과 소스 닫기 코드 - 가능한 한 소스 오픈 옵션을 선택하는 것을 권장합니다.다음 공급업체는 일반적으로 합리적으로 구축된 새로운 소스 개발 프로젝트에 제로 원가 옵션을 제공한다🛠 제약조건.만약 당신이 폐쇄 소스 코드를 사용한다면, 당신은 약간의 제공을 필요로 합니다💵.
공통 공급자
트라비스 CI - 제 첫 번째, 저를 위해 봉사해 주셔서
Circle CI - Travis CI
Gitlab - 소스 오픈 경향, 기타 모두 소스 코드
GitHub 작업 - 업데이트, GitHub 네이티브, Linux, Windows 및 MacOS 버전 제공.
너는 네가 좋아하는 것을 자유롭게 사용할 수 있다. 느낌이 정확하거나 시작하고 싶다.본고는 비교가 아니라 하나의 CI 서비스를 사용하는 과정을 소개한다.
Start small and build up what you learn. You will make progress, run into challenges, figure some out. Remember to sleep!!!!
Photo credit: 4geeksacademy.co/feelings-learning-coding/
이것은 사람을 진작시키고, 보답이 있으며, 때로는 매일 스트레스로 가득 차 있다.😬
이러한 도구와 과정을 배우는 과정에서 잘못된 선택은 없다.너의 출발점이 반드시 미래의 출발점은 아니다.나의 건의는 네가 하나를 선택해서 너무 많이 생각하지 말고 일을 시작하는 것이다.
Put your work out there and connect with others. You don't have to create something from scratch. You can help your favorite existing projects set up or improve their CI/CD pipeline.
It's better when we build together. 🌎🌈🌍🚀🌏
지식이 끊임없이 풍부하면, 너는 곧 자신의 성과에 경탄할 것이다.🗺️ 🚀 💻
선결 조건
Github, Python, 테스트 프레임워크, 그리고 Terminal을 어떻게 사용하는지에 대한 기본 지식을 갖추어야 합니다.PIPNV(Pipfiles)와pytest 지식자가 우선이지만 필요하지 않습니다.CI/CD 도구는 두 가지를 배우는 좋은 방법입니다.Travis CI 계정도 만들 예정입니다.
YAML 기초 지식
대부분의 CI 서비스는 YAML 구성 파일을 사용하여 저장소와 상호 작용합니다.
In case you need a tune up on YAML, here is a recommended link:
Note: Ansible uses the YAML format, and is is another useful tool. A more detailed guide is an encouraged topic for another time.
Travis CI YAML 예
다음은 내 프로젝트의 전체 예시
.travis.yml
파일입니다.우리는 모든 부분을 분해할 것이다.# .travis.yml
dist: xenial
language: python
cache: pip
python:
- "3.6"
- "3.7"
- "3.8"
- "nightly"
matrix:
allow_failures:
- python: "nightly"
install:
- pip install pipenv --upgrade-strategy=only-if-needed
- pipenv install --dev
script:
- bash scripts/test.sh
after_script:
- bash <(curl -s https://codecov.io/bash)
모든 부분을 설명해 드릴게요.
dist: xenial
dist는 Ubuntu에서 코드 이름을 게시하도록 지정한 곳입니다.xenial
은 Ubuntu 16.04 LTS의 코드 이름입니다. 전체 목록은 http://releases.ubuntu.com/을 참조하십시오.이것은 나머지 워크플로우에 사용할 기본 운영 체제를 지정합니다.
language: python
언어는 사용하는 프로그래밍 언어다.이 강좌는python을 사용하지만 cpp
, go
, rust
등일 가능성이 높다.cache: pip
캐시는 실행 사이에python 패키지 버전을 저장하여 순서 구축을 가속화할 수 있습니다.캐시는python 패키지에만 적용되지 않습니다.python:
- "3.6"
- "3.7"
- "3.8"
- "nightly"
상술한 언어 규범을 정하면python은 일련의python 버전이 구축을 실행하는 관건이다.일반적으로 대부분의 CI 도구는 부차적인 버전마다 최신 버그 버전을 사용합니다.구축 로그는 구체적인 버전을 알려 줍니다.matrix:
allow_failures:
- python: "nightly"
행렬은 상기 구축 시퀀스에서 수정할 수 있습니다.이 예에서 allowfailures 키는 상술한python 서열에 대한 인용을 지정합니다. 그 값은 "nightly"
입니다. 이것은 이 버전이 실패할 수 있음을 의미합니다.초기 탐지 및 향후의python 개발로 간주 가능*주의:python 버전마다 개발 버전이 있습니다. 예를 들어 "3.8-dev"
입니다.python 버전이 후보 버전이나 테스트 버전 단계에 있을 때 이 옵션을 사용합니다.install:
- pip install pipenv --upgrade-strategy=only-if-needed
- pipenv install --dev
설치는 모든 구축 목표 (위의python 버전의 가상 환경) 내에서 실행되는 첫 번째 부분입니다.Each item in the sequence is executed in order!
Pipenv 및 PIP 파일
이 예에서 우리는
pipenv
과 Pipfile
을 사용한다.대부분의 PIP 파일은 생산 의존 관계와 개발 의존 관계를 가지고 있다.일반적으로
dev-packages
부분에서 테스트 용례나 문서 구축에 필요한 패키지를 찾을 수 있습니다.다음은 예입니다.[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
mypy = "*"
black = "*"
jupyter = "*"
better-exceptions = "*"
pytest = "*"
pytest-cov = "*"
isort = "*"
flit = "*"
autoflake = "*"
mkdocs = "*"
mkdocs-material = "*"
[packages]
pydantic = "==0.32.2"
pip install --dev
에 [packages]
과 [dev-packages]
의 모든 패키지를 설치하라고 명령합니다.pip install
에는 [packages]
의 패키지만 설치됩니다.요구 사항txt 파일
Note: It is also common to use
pip
with arequirements.txt
file.
pip install -r requirements.txt
구렁이org는 현재 pipenv
을 통용 tool recommendations의 일부로 추천합니다.다양한 가상 환경 옵션 정보
Pipenv
의 장점은 다른 소프트웨어 패키지가 없는 상황에서 소프트웨어 패키지를 가상 환경에 설치할 수 있는 메커니즘을 제공했다는 것이다.많은 대체 방안이 있다. - 간단한 대체 방안은 venv
이다.비교적 새로운 대체 방안은
poetry
(https://poetry.eustace.io/)이다.poetry
은 이 두 가지 요구를 촉진하기 위한 것이다.txt와 PIP 파일은 연결되지 않습니다. 이것은 PyPi에 배치할 때 방출되는 의존 항목입니다.일반적으로 flit
및 pyproject.toml
파일 또는 중복 종속 정보가 있는 setup.py
파일을 볼 수 있습니다.이러한 이중화는 개선을 위해 설계된 poetry
입니다.이제 CI/CD 설정을 지원합니다.
1.python 패키지 프로젝트 템플릿을 설치하기 위해 설치 프로그램을 가져옵니다.
호환되는python 확보🐍 컴퓨터상의 환경.
python3 --version
python3 -m pip --version
python3 -m pytest --version
상기 중 하나가 부족하면 이 패키지를 주python 설치에 추가할 수 있습니다.Recommended reading on Python main install vs. altinstall.
If you only have or want one python3 version on your machine, there is no harm to run the following commands. There are nuances between Ubuntu versions (16.04 vs. 18.04 vs. latest) on which python3 version is the default install.
sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python3-pytest
현재, 우리는 당신의 기본python 설정을 확인했습니다. 다음에pipenv와 쿠키커터python 패키지를 설치했는지 확인하십시오.
python3 -m pip install --user pipenv
python3 -m pip install --user cookiecutter
2. Python 프로젝트를 만들고 Pipenv 가상 환경을 설정합니다.
# make sure your path finds --user installs
## add `export PATH="$HOME/.local/bin:$PATH"`
## to your ~/.bashrc, ~/.zshrc file on linux
cookiecutter https://github.com/iancleary/pypackage
# For the sake of brevity, repos on GitHub can just use the 'gh' prefix
cookiecutter gh:iancleary/pypackage
`마법사 작성!
cd new-directory
을 사용하여 새로 만든 디렉터리로 전환(new-directory
대체)pipenv
을 실행하여 옵션을 표시합니다.뭘 제공했는지 보자.다음은
pipenv install --dev
을 실행하여 Pipfile
에 지정된 생산 및 개발 의존항을 설치합니다.pipenv shell
을 실행하여 가상 환경을 로드합니다.3. 로컬에서 테스트를 실행하고 통과하도록 확인
I recommend you open up VS code or your text editor of choice to view the folder structure
디렉토리의 Pipenv에서
./scripts/tests.sh
을 실행합니다.이 명령은 다음 작업을 수행하는 bash 스크립트를 실행합니다.
pytest
테스트 용례 검사 및 테스트 커버율 black
패키지 mypy
을 사용하여 코드 라이브러리의 정적 형식 검사를 실행합니다4. 디렉터리를 원격gitrepo로 전송
Github 도움말 페이지의 지침을 따르는 것이 좋습니다.
5. 환매에 Travis CI 연결
마찬가지로 GitHub 및 Travis CI 문서는 이 단계에서 유용합니다.
GitHub 계정으로 로그인하려면 Travis-CI으로 이동하십시오.
6. 이제 우리는 이미 설정되어 구축을 시작합니다
Repo에 대한 간단한 변경 사항을 제출하거나 새로운 지점을 열어 구축을 시작합니다!
너를 잡아라🍿 CI 과정의 시작과 완성을 살펴봅시다!😎
이 과정을 보는 것은 매우 멋있다.
기억해야 할 관건은 테스트 세트의 중복성이다.
완료되면 새 항목이 Travis CI 대시보드에 추가됩니다.다음 세 개의 빨간색 테두리는 다음과 같습니다.
7.CI/CD 파이프의 즐거운 인코딩🎉🙌
설정은 코드가 이 조건에서 작동할 것이라고 다른 사람들과 믿게 해야 합니다.만약 이것이 개원된 환매 협의라면, 너는 그것을 믿을 수 없다.일지는 저기 있다!
You will not want to go back to your life before it!
It is such a quality improvement!
여기서 어디로 갑니까?
다른 작업을 자동으로 수행할 수 있는 예도 있습니다.
Pypi 출시
나는 이 방면에서 아직 많은 일을 하지 않았지만, 다른 프로젝트가 flitpython 가방을 성공적으로 사용한 것을 보았다.
다음 단계인 경우
flit
에 서명하십시오.나는 CI/CD 파이프 안팎에서 사용할 수 있는 또 다른 좋은 강좌가 있다는 것을 안다.Jupyter 노트북 이미지 배포, Docker Hub에 CI/CD 배포
최근에 나는 점점 더 Jupyter 노트북과 Docker를 사용하고 있다.Travis CI를 사용하여 자동 테스트와 배포 파이프라인을 구축함으로써 저는 개인 이미지의 유지보수 모델을 현저히 개선했습니다.내 personal Jupyter notebook 저장소 보기!
체크 아웃 Docker 이미지는 iancleary/personal-notebook입니다.
bash
docker pull iancleary/personal-notebook
Amazon EC2 인스턴스 배포
I also am in the process of learning how to leverage continuous deployment onto Amazon EC2 instances.
You can find my notes on connecting AWS CodeDeploy and Travis CI using a Flask project.
This example is a proof of concept, and I'm excited to use this workflow more in the future.
공구서류
- I learned a lot from https://github.com/tiangolo/fastapi and credit them as authors within my cookicutter pypackage AUTHORS.md. This is not only nice to do, but is required by many open source licenses.
Reference
이 문제에 관하여(Travis CI 및 Python을 사용하여 CI/CD 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/iancleary/an-introduction-to-ci-cd-with-travis-ci-and-python-3025텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)