개발에서 프로덕션에 이르는 API – 섹션 3 GitHub 운영
시리즈 소개
이 블로그 시리즈의 세 번째 부분에 오신 것을 환영합니다. 이것은 가장 기본적인 예로부터 시작됩니다.net5 웹api 및 개발에서 생산까지의 과정.Azure, Docker, GitHub, GitHub 작업을 사용하여 CI/C 배치를 진행하고 인프라 시설을 Pulumi를 사용하는 코드로 사용할 것입니다.
이 문서에서 주목할 사항은 다음과 같습니다.
TL;박사 01 명
우리는 이전처럼 로컬에서 구축하지 않고, GitHub 작업과 GitHub 용기 등록표를 사용하여 Docker 이미지를 저장합니다.GitHub 작업 흐름은 기본적인 YAML입니다. 우리는 몇 가지 조작을 사용하여 우리가 필요로 하는 것을 실현했습니다.저장소 docker build에 서명하고 GitHub 용기 등록표에 로그인했으며 docker push 명령을 실행했습니다.GitHub 컨테이너 레지스트리에서 GitHub secrets에 개인 액세스 토큰을 사용하여 GitHub 컨테이너 레지스트리에서 공용 이미지를 제거하고 Postman을 사용하여 로컬에서 테스트를 수행했습니다.
GitHub 저장소
방울방울 / 견본일기예보 제3부
이 저장소는 블로그 글 시리즈의 일부로 API가 개발에서 생산에 이르기까지 개발에 관한 세 번째 부분이다.표준에 기초하다.net 표준 날씨 API 샘플.
요구 사항
우리는 우리가 중간에서 끝낸 곳을 계속할 것이다. 이것은 당신이 GitHub Repo from - Part 2의 최종 결과로부터 시작해야 한다는 것을 의미한다.
GitHub 작업이란?
GitHub Actions는 다양한 소프트웨어 워크플로우를 GitHub 내부에서 쉽게 자동화할 수 있습니다.당신은 코드를 구축하고 테스트하며 배치할 수 있습니다.워크플로우는 푸시, 문제 생성 등 여러 GitHub 이벤트에 의해 트리거될 수 있습니다.리눅스, 맥OS, 윈도, ARM, 물론 용기, 심지어 매트릭스 구축도 지원하기 때문에 여러 운영체제에 걸쳐 같은 소프트웨어를 구축할 수 있습니다. 실시간 로그, 비밀 저장소 등이 있고 UX도 상당히 좋습니다.이 모든 것은 YAML 파일로 구동되며, 이 파일들은 아름답고 깔끔하며, 원본 코드 관리에 저장되어 있다.
그리고 GitHub 패키지는 npm,nuget 등 다양한 패키지 관리 공급자가 있습니다.용기에 대해 새로운 GitHub 용기 등록표가 있기 때문에 그림은 GitHub 패키지에 저장할 필요가 없고 진정한 용기 등록표가 있습니다. 이 블로그에서 사용할 것입니다: D
시작해보도록 하겠습니다.
저장소의 GitHub 작업으로 이동하면 위 화면이 표시됩니다.각종 시작 작업 절차가 있거나, 너는 처음부터 시작할 수 있다.
처음부터 워크플로우 구축
우리는 처음부터 그것을 구축할 것이다. 그것은 내용이 많지 않을 뿐만 아니라, 이런 방식으로 발생하는 일을 더욱 쉽게 배우고 이해할 수 있다.
고르다→ 직접 워크플로우 설정
유용한 지침이 포함된 기본 워크플로우를 볼 수 있습니다.
워크플로우 파일 이름을
build-and-publish.yml
, 이름(3행)을 Build and Publish
으로 변경했습니다.on 섹션에서 다양한 GitHub 이벤트에 트리거를 설정할 수 있습니다.
그것들은 상당히 자명하지만, 만약 당신이 노력하고 있다면, GitHub에는 그것에 관한 괜찮은 문서가 있습니다: GitHub Actions - Workflow Syntax
이제 모든 댓글을 삭제합시다. 왜냐하면 이것은 저에게 좀 지루하기 때문입니다. 그러나 우리가 사용하는 명령을 이해해 주십시오.만약 없다면, 우리가 지금 이 업무 흐름을 편집함에 따라, 일은 더욱 분명해질 것이다.
모든 주석을 삭제하고 기본 템플릿 코드를 삭제한 경우 다음과 같은 간단한 내용만 남겨야 합니다.
name: Build and Publish
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch:
jobs:
build-and-publish:
runs-on: ubuntu-latest
steps:
주 지점에서 밀어넣기 또는 끌어당기기 요청 이벤트가 발생할 때 이 작업 흐름을 실행한 다음 작업을 실행하고 작업에 절차가 있음을 알려 줍니다.이 절차를 주목하고git 메모리 라이브러리의 서명을 추가합니다.
- name: Checkout the repo
uses: actions/checkout@v2
사용은 이해의 관건이다. 이것은 하나의 동작이다. 너는 심지어 GitHub Marketplace의 코드를 볼 수 있다그 기능과 사용 방법에 대한 유용한 문서를 발견할 수 있을 뿐만 아니라, 당신이 하고 싶은 일을 할 수 있는 GitHub 작업도 만들 수 있다. 뭔지 알아맞혀 보세요.Docker 컨테이너를 기반으로 할 수도 있습니다!
사용자 지정 GitHub 작업을 만들어 이점에 활용하는 방법에 대한 자세한 내용을 보거나 GitHub - Creating Actions을 참조하십시오.
다음은 Docker build 입니다.
- name: Build docker image
run: docker build . -t ghcr.io/peterjking/samples-weatherforecast:${{ github.sha }}
여기서 우리는 docker build
을 실행할 뿐입니다. 우리의 Dockerfile
은 현재 디렉터리에 있기 때문에 주기는 .
입니다. 우리는 이미지 표시를 my GitHub 용기 등록표:GitHub로 설정합니다.모래각 GitHub 계정에는 용기 레지스트리, 일명 GitHub 패키지가 있습니다. 자세한 내용은 -https://ghcr.io을 참조하십시오.
You image tag must be lowercase - if you have a GitHub username like mine where there is uppercase letters, you can either hardcode it here like I have for the moment, store this in a GitHub Secret or convert to lowercase dynamically.
현재 Docker 이미지를 구축했습니다. GitHub 용기 등록표로 전송하려면 유효한 증거가 필요합니다.이러한 경우 GitHub 액세스 토큰을 사용하여 재구매 계약의 GitHub 기밀 영역에 안전하게 저장할 수 있습니다.우리 지금 준비하러 가자.
설정으로 이동(개인 정보)
개발자 설정 선택
개인 액세스 토큰을 선택합니다.
클릭하여 새 토큰을 생성
PAS (개인 접근 영패) 의 이름을 설정하고 OAuth 범위를 설정할 수 있는 새 화면을 볼 수 있습니다.우리의 예에서, 우리는 write:packages,read:packages와 delete:packages만 필요합니다.
접속 영패의 이름을 지어주세요. 제 이름은
ghcr
입니다.방문 영패를 복사합니다.
Once you’ve generated the token, you won’t be able to get the value again, however, you can always regenerate a new value.
GitHub 저장소 설정으로 이동→ 비밀.→ 새 저장소 기밀 정보 를 클릭합니다.
이름을 입력하고 값을 붙여넣은 다음→ 비밀을 덧붙이다.
현재 GitHub 용기 등록표에 접근해서 이미지를 전송하는 데 성공했습니다.
다음은
login-action@v1
이라는 GitHub 작업을 사용하고 일부 변수를 사용하여 설정합니다.이 작업에 대한 자세한 내용은 GitHub Actions Marketplace - docker-login을 참조하십시오.
- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_CR }}
또한 repository_owner
이라는 내부 GitHub 환경 변수를 사용하고 있습니다. 이 변수는 저장소 소유자를 포함하고 있습니다. 이것은 제 사용자 이름과 같기 때문에 제 GitHub 용기 등록표입니다.다음은 우리가 이전에 창조한 비밀,
GH_CR
.현재 우리는 로그인 조작 설정이 있어서 마침내 우리의
docker push
을 완성할 수 있다. - name: Push docker image
run: docker push ghcr.io/peterjking/samples-weatherforecast:${{ github.sha }}
이렇게!그러나 만약 우리가 두 곳에서 이미지 라벨을 사용한다면 우리는 가벼운 강화를 할 수 있다.
나는
env
절을 추가했는데, 이것은 나의 작업 흐름에 변수를 사용합니다. 나는 그것을 image-name
이라고 명명하고, docker build
과 docker push
명령에서 사용합니다.전체 Dockerfile
name: Build and Publish
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch:
env:
image-name: ghcr.io/peterjking/samples-weatherforecast:${{ github.sha }}
jobs:
build-secure-push:
runs-on: ubuntu-latest
steps:
- name: Checkout the repo
uses: actions/checkout@v2
- name: Build docker image
run: docker build . -t ${{ env.image-name }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_CR }}
- name: Push docker image
run: docker push ${{ env.image-name }}
Make sure you workflow looks like the above, except the username in the
env
image-name
variable of course; this should be your username.
이제 압박할 준비가 됐어요.→ 약속 시작!
GitHub 작업이 시작되면 해당 작업이 대기열에 추가되어 진행 중입니다.
The time delay between Queued to In Progress, if you’re used to an older style build system where you can be waiting minutes or even hours in some cases, you’ll be happy to learn this is ultrafast!
빌드가 시작되고 진행 중입니다.
온통 푸르다.성공했어!
다음은 구축에 1분 31초가 소요되는 요약을 볼 수 있다.
"구축 보안 푸시"를 누르면 단계와 로그를 볼 수 있습니다.
이제 패키지로 이동하여 Docker 이미지가 GitHub 컨테이너 레지스트리에 실제로 저장되어 있는지 확인합니다.
소포 링크를 클릭하세요.
예를 들어 명령줄이 있는 유용한 부분을 맨 위에서 볼 수 있습니다.
Copy this now as we'll need it in the very next step to test.
이 그림을 테스트해 보도록 하겠습니다.
docker pull ghcr.io/peterjking/samples-weatherforecast-part-3:e5f0710a08eae6d19c39a8ef04dbddff211dcd88`
Note your image name will have a unique SHA1 as the Docker tag.
패키지에서 docker pull을 복사해서 명령줄로 이동해서 실행합니다.
개인 패키지를 취급하는 경우
unauthorized
을 받게 됩니다.이 문제를 해결하는 방법의 하나는 가방 설정의 가시적 설정을 바꾸어 대중에게 가방을 열어주는 것이다.
Once you make the package public, you cannot go back.
The alternative is to login to your GitHub Container Registry first with docker login.
현재, 나는 단지 이 가방을 공개했을 뿐, docker 로그인에 대한 더 많은 정보는 Docker Docs - Commandline - Login을 참조하십시오.
부두 노동자 경주
docker run -it --rm -p 8080:8080 ghcr.io/peterjking/samples-weatherforecast-part3:e5f0710a08eae6d19c39a8ef04dbddff211dcd88`
요청 보내기
저희가 뭘 배웠죠?
우리는 이곳에서 많은 것을 배웠지 않습니까?GitHub 작업의 기본 지식을 배웠습니다. 자신의 업무 흐름을 어떻게 작성하는지, 거의 처음부터 개인 방문 영패를 생성하고, 이 영패를 저장소 기밀 구역에 저장하는지.
Google 작업 프로세스에 docker 구축, 로그인 GitHub 용기 등록표를 추가했고, 마지막으로 docker push 명령을 추가했습니다.
우리는 이미 GitHub의 행동을 보았다.워크플로 요약 및 워크플로 작업 출력입니다.
마지막으로 GitHub 컨테이너 레지스트리에서 Docker 이미지를 추출하여 로컬에서 테스트했습니다.이 시리즈의 블로그와는 달리, 이전에 로컬에서 docker 이미지를 구축했습니다. 로컬에서 docker 저장소에 있습니다.현재 사용 중인 프로세스는 Docker 파일에 사용된 기본 이미지와 다른 회사/개인이 Docker Hub에 저장한 이미지와 같습니다.마찬가지로 당신은 GitHub Container Registry을 사용할 필요가 없고 Docker Hub만 등록하면 됩니다.다른 타사 솔루션도 있다는 사실을 잊지 마십시오. 예를 들면 다음과 같습니다.
Azure Container Registry AKA-ACR.
Quay.io - 빨간 모자에서 왔어요.
다음
이 시리즈에서는 다음을 설명합니다.
추가 정보
Reference
이 문제에 관하여(개발에서 프로덕션에 이르는 API – 섹션 3 GitHub 운영), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/peteking/api-s-from-dev-to-production-part-3-7dn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)