Travis에서 Bintray로 배포하여 자동으로 버전을 설정하고 업로드

4433 단어 Bintraytravis
한이라면 Gitub 커밋하고 Travis 빌드하고 Bintray에 배포하네요!

travisCI + Bintray로 자동 배포를 시도한 메모

도움이 될 것입니다, 감사합니다.

그러나 Travis가 제공하는 샘플 절차 htps : // / cs. t 등 ぃ s - 해. 코 m / 우세 r /에서 p ぉ y 면 t / 병 t 등 y / 인 경우 버전 번호는 JSON에 수동으로 작성해야합니다.

매번 수작업은 죄송합니다 ... 인간의 욕망은 질리지 않습니다.

그래서 sed에서 버전 번호와 릴리스 날짜를 travis 빌드 후 다시 작성한 .json을 만들어 bintray에 업로드하는 방법을 생각해 보았습니다.
tinyobjloader에서 사용해 보았습니다.



절차



먼저 Binray에서 프로젝트와 패키지 디렉토리를 만듭니다.

그런 다음 bintray json 템플릿 (.bintray.in)을 준비합니다.
{
    /* Bintray package information.
       In case the package already exists on Bintray, only the name, repo and subject
       fields are mandatory. */

    "package": {
        "name": "releases", // Bintray package name
        "repo": "tinyobjloader", // Bintray repository name
        "subject": "syoyo" // Bintray subject (user or organization)
    },

    /* Package version information.
       In case the version already exists on Bintray, only the name fields is mandatory. */

    "version": {
        "name": "@VERSION@",
        "desc": "@VERSION@",
        "released": "@DATE@",
        "vcs_tag": "@VERSION@",
        "gpgSign": false
    },

    /* Configure the files you would like to upload to Bintray and their upload path.
    You can define one or more groups of patterns.
    Each group contains three patterns:

    includePattern: Pattern in the form of Ruby regular expression, indicating the path of files to be uploaded to Bintray.
    excludePattern: Optional. Pattern in the form of Ruby regular expression, indicating the path of files to be removed from the list of files specified by the includePattern.
    uploadPattern: Upload path on Bintray. The path can contain symbols in the form of $1, $2,... that are replaced with capturing groups defined in the include pattern.

    Note: Regular expressions defined as part of the includePattern property must be wrapped with brackets. */

    "files":
        [ {"includePattern": "dist/(.*)", "uploadPattern": "$1"} ],
    "publish": true
}
@VERSION@, @DATE@를 빌드 날짜와 git tag (Travis의 경우 TRAVIS_TAG로 가져올 수 있음)로 바꾸는 스크립트 (./tools/travis_postbuild.sh)를 준비하십시오.
#!/bin/bash

DATEVAL=`date +%Y-%m-%d`
VERSIONVAL=master

# Use tag as version
if [ $TRAVIS_TAG ]; then
  VERSIONVAL=$TRAVIS_TAG
fi

# MacOSX sed(BSD sed) は inplace(-i) が使えないことに注意!
sed -e s%@DATE@%${DATEVAL}% .bintray.in > .bintray.tmp
sed -e s%@VERSION@%${VERSIONVAL}% .bintray.tmp > .bintray.json

참고! Bintray는 날짜 형식을 제한합니다.
  • Date in the format of 'yyyy-MM-dd'T'HH ss.SSSZZ'
  • java.util.Date instance

  • Bintray가 지원하는 날짜 형식에 맞춰야합니다.

    이것을 travis before_deploy에서 실행하여 .bintray.json을 만들 수 있습니다.
    before_deploy:
      - echo "Creating description file for bintray."
      - ./tools/travis_postbuild.sh
    
    deploy:
      - provider: bintray
        file: ".bintray.json"
        user: "syoyo"
        key:
          secure: XXXXXXXX
        all_branches: true
        on:
          repo: syoyo/tinyobjloader
          condition: -n "$DEPLOY_BUILD"
          tags: true
        skip_cleanup: true
    

    tinyobjloader는 build matrix를 사용하기 때문에 condition를 붙이지 않으면 모든 빌드에서 bintray에 업로드하려고합니다.
    또한 태그를 빌드 할 때만 배포하십시오 (all_branches: true, tags: true).

    github commit



    그런 다음 git으로 태그를 치고 github에 푸시하면됩니다.

    Voala! 각 tag 이름별로 파일을 bintray에 업로드 할 수있었습니다!

    문제점



    Travis 에서의 bintray 배포 가능 기능(deploy provider = bintray)이라면, 이미 bintray 에 파일이 업로드되어 있는 경우는 갱신(덮어쓰기)에 실패합니다. 치면 릴리스를 다시 시도 할 때 Bintray에서 파일을 한 번 삭제해야합니다.

    .json 설정 파일에서는 파일 덮어쓰기와 같은 파라미터가 없기 때문에, 결국은 Curl(REST API) 베이스로의 운용이 좋을지도 모릅니다. 참고예는 이쪽.

    좋은 웹페이지 즐겨찾기