배경
전문 소프트웨어 개발은 개발 프로세스 초기에 실수를 포착하기 위해 테스트 자동화 및 지속적 통합(CI)에 크게 의존합니다.젠킨스은 대규모 활용을 확인한 최초의 오픈 소스 자동화 서버였으며 슬롯에서 매일 사용되는 도구 중 하나입니다. GitLab CI/CD 및 GitHub Actions를 통해 두 개의 주요 저장소 플랫폼은 최근 몇 년 동안 자체 지속적인 통합 제품도 추가했습니다. 슬롯 모델 개발자의 경우 Jenkins, GitHub 및 GitLab의 CI 기능을 쉽게 사용할 수 없었습니다. 빌드 프로세스가 테스트 코드를 실행하는 데 사용할 수 있는 슬롯 설치와 통신하기 어려웠기 때문입니다.
다행히도 최신 제품에서는 이것이 변경되었습니다.슬롯 엔진.아직 모르는 분들을 위해 슬롯 엔진은 슬롯 작업을 중앙 위치에 제출하고 실행하는 데 사용할 수 있는 REST API를 제공합니다.
아래에서는 GitHub의 슬롯 모델 개발자가 엔진을 사용하여 모델에 대한 자동화된 테스트를 쉽게 실행할 수 있는 방법을 간략하게 설명합니다. GitLab과 Jenkins에도 동일한 원칙이 적용됩니다.
GitHub 예
전제조건
- 슬롯 모델 코드가 포함된 GitHub 저장소.
- 슬롯 엔진 인스턴스에 액세스하기 위한 자격 증명.
오픈 소스 개발자는 다음 주소로 문의하시기 바랍니다.support@슬롯com우리 엔진 인스턴스 중 하나에 무료로 액세스할 수 있습니다.
완료 방법
'GitHub 작업'의 개념은 간단합니다. 간단히 말해서:
- 모두이벤트코드 저장소에서 발생하는 일(예: 새 커밋 푸시)은 다음을 트리거할 수 있습니다.워크플로
- 워크플로에는 하나 이상이 포함되어 있습니다.일자리, 다음과 같은 컴퓨팅 리소스에서 실행됩니다.주자. 작업에서 발생하는 모든 작업은 동일한 실행기에서 순차적으로 실행되며 기본적으로 여러 작업은 여러 실행기에서 동시에 실행됩니다. Linux, Windows 또는 macOS를 기반으로 실행기를 선택할 수 있습니다. GitHub에서 제공하는 매우 넉넉한 무료 실행 시간 할당량이 있으며 이는 대부분의 프로젝트에 충분합니다(참조https://github.com/features/actions#pricing-details) .
- 각 작업에는 하나 이상이 포함되어 있습니다.걸음. 일반적인 단계는 '저장소에서 실행기로 최신 버전 체크아웃', '소스 컴파일', '서버에 배포' 등이 될 수 있습니다.
- 각 단계 호출작업또는 쉘 명령을 실행합니다. 액션은 실제로 어떤 일을 하는 것입니다.
엔진을 사용하여 슬롯 모델에 대한 자동화된 테스트를 실행하는 방법을 보여주기 위해 개발 팀의 Freddy는 다음에서 두 개의 GitHub 작업을 만들었습니다.https://github.com/슬롯-dev/actions .
- "run-job" 작업을 사용하면 슬롯 엔진 인스턴스에서 모델을 실행할 수 있습니다.
- "update-model" 작업을 사용하면 슬롯 엔진 인스턴스에서 슬롯 모델을 등록하거나 업데이트할 수 있습니다. 이는 자동화된 테스트와 관련이 없지만 슬롯 엔진에서 모델 배포를 제어하는 데 유용하며 이 문서의 범위를 벗어납니다. 다른 문서에서 모델 배포를 다루겠습니다.
GitHub 액션을 어떻게 사용하나요?
워크플로를 정의하려면 다음에서 YAML 파일을 생성해야 합니다..github/workflows/소스 저장소 내부. 새 커밋이 저장소에 푸시되면 다음 워크플로가 실행됩니다. 새 실행기에 대한 최신 커밋을 확인하고 슬롯 엔진에 제출할 모델을 준비한 다음 엔진에서 컴파일 전용 모드로 모델을 실행합니다.
# 워크플로 이름
이름: 테스트 데모
# 어떤 이벤트가 작업 흐름을 트리거해야 합니까?
켜짐: [푸시]
# 작업 정의
일자리:
엔진에서 모델 테스트:
# 러너의 운영체제를 선택하세요
실행 중: 우분투-최신
# 작업의 모든 단계를 정의
걸음:
# 첫 번째 단계: 실행기로 저장소 체크아웃
- 사용: actions/checkout@v2
# 두 번째 단계: zip 파일 생성
- 실행: |
zip -r model.zip PATH1 PATH2
# 세 번째 단계(이름 포함): 실행 작업 작업 사용
# 슬롯/엔진 인스턴스에 작업을 제출하기 위한 매개변수 전달
- 이름: 데모 작업 제출
사용: 슬롯-dev/actions/run-job@v1
와:
url: $ secrets.ENGINE_URL
네임스페이스: $ secrets.ENGINE_NS
사용자 이름: $ 비밀.ENGINE_USER
비밀번호: $ 비밀.ENGINE_PASSWORD
실행: 'model.gms'
인수: 'a=c,idir1=PATH1,idir2=PATH2'
모델_데이터: '$ github.workspace /model.zip'
'run-job' 작업에 전달될 수 있는 인수에 관해 몇 가지 설명이 필요합니다:
- 다음 형식의 몇 가지 변수를 사용하는 것을 볼 수 있습니다.
$ secrets.xyz. 이러한 변수는 모델 저장소에 암호화된 형식으로 저장될 수 있습니다.(https://docs.github.com/en/actions/security-guides/encrypted-secrets). 다음을 가리키도록 이러한 비밀을 설정해야 합니다.url선택한 Engine 인스턴스를 선택하고 다음을 제공하세요.사용자그리고비밀번호또한. - 그
$ github.workspace마지막 줄에 사용된 변수에는 작업의 첫 번째 단계에서 '체크아웃' 작업을 통해 코드가 체크아웃되는 실행기 내부 경로가 포함됩니다. - 인수
a=c모델이 슬롯 작업자에 의해 컴파일되지만 실행되지는 않습니다. 이는 구문 오류를 포착하는 데 충분하며 워크플로가 빠르게 완료되도록 해줍니다.
이 워크플로우 파일을 저장소에 추가하고 모델에 맞게 수정하면 저장소에 푸시할 때마다 엔진에서 모델 실행이 트리거됩니다. 모델 컴파일에 실패하면 실행이 실패하고 알림 이메일이 전송됩니다.
작업은 어떻게 작동하나요?
다음은 GitHub 작업 중 하나가 실행될 때 어떤 일이 발생하는지 이해하고 싶은 사람들을 위한 설명입니다.
- 슬롯-dev/actions 저장소에는 작업의 입력과 출력을 구성하는 각 작업에 대한 별도의 메타데이터 YAML 파일이 포함되어 있습니다(예:https://github.com/슬롯-dev/actions/blob/main/run-job/action.yml ).
- 메타데이터 정의는 GitHub에서 제공하는 "작업 툴킷"으로 읽습니다(https://docs.github.com/en/actions/creating-actions/creating-a-javascript-action), 'index.js' 파일의 스캐폴딩을 생성합니다. 실제 로직을 구현하기 위해 이 스캐폴딩을 완료해야 했습니다. 즉, Engine REST API를 사용하여 모델을 제출 및 예약하고 결과를 수신해야 했습니다.
- 저희 저장소에서 볼 수 있는 JavaScript 코드는 ncc를 사용하여 모든 종속성을 포함하는 단일 독립 파일로 컴파일되었습니다(https://github.com/vercel/ncc ).