Minecraft 리소스 패키지의 CI/CD

7544 단어 minecraftdevops
최근에 나는 자바 버전을 수정하는 세계로 돌아왔다. 그 중 일부로서 나는 새로운 자원 패키지 시스템의 세부 사항을 배우는 데 시간을 썼다.
역사적으로 마인크래프트에서'문양 패키지'를 만들 수 있습니다. 이것은 블록, 프로젝트, 괴물, 소리의 문양을 바꿀 수 있습니다.이것은 상당히 큰 지역 사회의 창설을 초래했고 많은 마인크래프트를 하는 창의자들에게 좋은 출구를 제공했다.그러나 이런 방법은 상당히 간단하고 뚜렷한 한계가 있다. 이런 한계성은 나중에 현재의'자원 패키지'를 통해 교체되어 해결되었다.자원 패키지는 문양을 전환하는 것을 넘어 프로젝트와 블록의 물리적 모델을 수정하고 게임의 텍스트를 변경하며 음악을 완전히 교체할 수 있습니다.이 두 시스템은 모두 그 중 하나에서 자원을 얻는다.특정한 구조를 가진 zip 파일이나 디렉터리.
자원 패키지는 마인크래프트의 창조성과 더욱 밀접한 관계를 가지지만 나는 그것과 관련된 기술 가능성을 참을 수 없다.대량의 메타데이터는 JSON 파일로 저장되기 때문에 특히 사용자 정의 모델과 대체 모델이나 무늬를 정의할 때 Git 등 버전 제어 시스템을 이용하여 변경 사항을 추적하기 쉽다.이것이 바로 사물의 지속적인 통합과 지속적인 배치에 역할을 발휘하는 곳이다.서버를 위해 자원 패키지를 개발할 때, 나는 배치 변경이 매우 어려울 것이라는 것을 금방 깨달았다. (어떤 경우, Minecraft 서버는 사용할 사용자 정의 자원 패키지를 정의할 수 있고, 클라이언트는 연결할 때 다운로드를 선택할 수 있다.) 그리고 이 과정을 간소화할 수 있는 것을 연구하기 시작했다.해결 방안은 상대적으로 간단하지만 생산력과 새로운 모델이나 무늬의 발표에 큰 영향을 미칠 수 있다.
첫 번째 단계는 서버에 연결된 클라이언트가 그것을 얻고 응용할 수 있도록 최종 zip 파일을 위탁 관리할 곳을 찾는 것이다.이를 위해 구글 클라우드의 무료 F1 마이크로 실례를 선택했다.이런 상황에서 유일한 잠재적인 제한 요소는 서버의 1GB 수출 데이터이다. 그러나 자원 패키지의 현재 크기가 매우 작다는 것을 감안하면 (약 11kb, 내 수학이 정확하면 약 110000건의 다운로드가 있을 것이다.) 나는 당분간 이 점을 안심하고 무시할 수 있다.파일 자체를 제공하기 위해nginx를 설치하고certbot과LetsEncrypt를 사용하여 인증서를 받았습니다.
기본적인 위탁 관리가 있어서 우리는 zip 파일을 교부하는 과정에 전념할 수 있다.이 프로젝트에 대해 저는 Minecraft를 사용했습니다. 편의를 위해 저는 사용 가능한 구축 시스템을 사용합니다(그리고 경쟁 상황을 보세요!).리소스 패키지를 전달하려면 다음 세 가지 작업을 수행해야 합니다.
  • JSON 리소스의 형식이 올바른지 확인합니다.그렇지 않으면 모델과 무늬가 파괴될 것이다.불행하게도 데이터 자체의 정확성을 검사하는 것은 또 다른 문제다.
  • 자원 패키지를 zip 파일로 묶습니다.
  • 이 zip 파일을 서버에 업로드합니다.
  • 테스트와 납품 코드가 관련될 때 상술한 절차가 반드시'새롭다'는 것은 아니며sourcehut에서 구축 목록을 사용하면 비교적 간단하다.
    image: alpine/edge
    packages:
      - zip
      - rsync
      - jq
    secrets:
      # Secrets go here.
    sources:
      - [email protected]:~username/repository
    environment:
      deploy: username@deployment-server
    tasks:
      - test: |
          cd repository
          # Ensure all JSON files are readable JSON.
          find . -type f -name "*.json" -exec cat {} + | jq . > /dev/null
      - build: |
          cd repository
          zip -r resource-pack.zip assets pack.mcmeta
      - deploy: |
          cd repository
          rsync -e "ssh -o StrictHostKeyChecking=no -i $HOME/.ssh/private-ssh-key" -avz resource-pack.zip $deploy:/public-directory
    
    대단히 좋다이야기가 끝났죠?그럴 가능성이 높지만, 우리는 더욱 진일보할 수 있다.Minecraft 서버는 클라이언트가 자원 패키지를 적용하기 전에 완전성을 검증할 수 있도록 SHA-1 해시를 지정할 수 있습니다.대다수 상황에서 이것은 문제가 아니지만 구체적으로 설명하는 것은 도움이 된다.
    나는nginx와 간단한 정적 페이지를 이용하여 작은 웹 서버를 만들어서 제한된 기계에서 연속적으로 실행하는 것이 아니라, 이 페이지는 새로운 SHA-1 배치 과정에서 수정되었다.이렇게 하면 우리는 자원을 절약하고 전체적으로 이동 부품이 더욱 적다.자원 패키지를 배치할 때 <code id="resource-pack.zip"></code> 부분은 교체됩니다!
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Resource Pack Repository</title>
        <link rel="stylesheet" href="https://unpkg.com/mvp.css">
    </head>
    <body>
        <header>
            <h1>Resource Pack Repository <small>server-ready</small></h1>
        </header>
        <main>
            <h3>Resource Pack</h3>
            <p>A basic resource pack!</p>
            <p>Download: <a href="/packages/resource-pack.zip"><code>/packages/resource-pack.zip</code></a></p>
            <p>sha1sum: <code id="resource-pack.zip"></code></p>
        </main>
    </body>
    </html>
    
    
    그리고 이 index.html 파일을 우리nginx 서버의 웹 디렉터리에 배치하여 방문자가 사이트에 도착할 때 제공합니다.
    그리고 다음 명령을 구축 목록의 deploy 단계에 추가할 수 있습니다.
    # Fetch the old index file.
    curl http://deployment-server > index-old.html
    # Update the code block with the new SHA-1
    sed -r "s/(<code id=\"resource-pack\.zip\">).*(<\/code>)/\1$(resource-pack.zip | awk '{print $1}')\2/g" index-old.html > index.html
    # Send the index file back up to the web host
    rsync -e "ssh -o StrictHostKeyChecking=no -i $HOME/.ssh/private-ssh-key" -avz index.html $deploy:/public-web-directory
    
    봐라!우리는 현재 정적 사이트를 하나 가지고 있으며, 그것은 시종일관 최신 SHA-1 해시를 가지고 있을 것이다.
    sourcehut
    압축하기 전에 JSON 데이터를 축소하거나 실제 내용을 테스트하여 모델과 일치하도록 할 수 있습니다. 그러나 이 프로젝트의 범위가 매우 좁다는 것을 감안하여 어디에 도착했는지 기쁩니다. 이제 자원 패키지의 나머지 부분을 완성하는 데 전념할 수 있습니다.아래의 토론에서 어떤 문제를 제기하는 것을 환영합니다!

    좋은 웹페이지 즐겨찾기