2014-09-24 4 views
5

내 웹 페이지를 호스팅하는 gitub.io 저장소가 있습니다. 해당 웹 페이지의 소스 (컴파일되지 않은 Jade/Sass 코드)는 별도의 공개 저장소에 있습니다. Travis-CI은 내 소스 저장소에서 변경 사항을 감시하고 컴파일 스위트를 실행하여 github.io 저장소에 푸시되는 HTML/CSS를 생성하도록 설정됩니다.트래비스를 사용하여 github 저장소에 자동 푸시

내 사용자 이름과 암호를 내 .travis.yml 파일에 하드 코딩하지 않고도 컴파일이 통과 된 경우 자동으로 github 저장소에 대한 푸시를 수행하도록 트래비스를 설정할 수 있습니까?

나는 this question을 보았지만 Travis를 염두에두고 대답하지 않았습니다. 개인 키를 repo 또는 travis 스크립트에 넣어야하기 때문에 키 쌍 인증을 사용할 수 없다고 생각합니다. 이는 내 비밀번호를 입력하는 것과 마찬가지로 큰 보안 허점입니다.

여기에 바람이 다른 사람들을위한

, 나는 발판으로 roidrage의 답변을 사용하여 다음과 같은 정보를 발견

  1. 트래비스 당신은 민감한 정보를 포함 할 수 있도록 공개/개인 키 암호화를 사용합니다 .travis.yml 파일 "travis"라고 불리는 보석을 설치하고 물건을 암호화하는 데 사용할 수 있으며, 안전하게 끝까지 해독합니다. 문서 : http://docs.travis-ci.com/user/encryption-keys/

  2. github에서 applications settings에 "개인 액세스 토큰"을 생성 할 수 있습니다. 이것은 응용 프로그램에서 암호처럼 사용할 수 있습니다. 위의 기술을 사용하여 암호화하고 yaml에 던져 넣으십시오.

+0

트래비스는 변수 ('SOMEVAR')를 요구합니다. 어떤 변수를 사용해야합니까? – koppor

+1

@koppor 나는 잘 모른다. 도움이된다면 travis를 사용하여 pdf로 markdown 파일을 컴파일 한 다음 컴파일 된 pdf를 repo에 다시 넣는 repo가 ​​있습니다 : https://github.com/ahemmeter/ahemmeter.github.io –

+1

필자의 경우, travis gem을 사용하여 ssh 개인 키 (배포 키)를 암호화했습니다. 나는 repo에 암호화 된 개인 키를 저장했다. travis는 repo를 다운로드하고 개인 키를 해독 한 다음 해독 된 키를 사용하여 repo로 푸시 백합니다. –

답변

4

.travis.yml 파일에 암호화 된 방식으로 GitHub에 액세스하기위한 토큰을 저장하면이 작업을 수행 할 수 있습니다. 데이터 암호화 방법에 대한 예는 docs을 참조하십시오.

Push to GitHub Pages에는 blog post 단계가 매우 잘 요약되어 있으며 빌드시 사용할 수있는 a script을 가리키고 있습니다.

스크립트의 미러가 여기에 있습니다 :

#!/usr/bin/env bash 

# This script was written to facilitate the deployment process of Pelican 
# websites using Travis CI. See this blog post for more information: 
# http://kevinyap.ca/2014/06/deploying-pelican-sites-using-travis-ci/ 

usage="Usage: $(basename "$0") (deploy | diff | serve) 

Commands: 
    deploy  Upload site to Github Pages 
    diff  Compare locally generated site to live site 
    serve  Generate and serve site (auto-reloads on changes)" 

TARGET_REPO="iKevinY/iKevinY.github.io" 
GH_PAGES_BRANCH="master" 

DEVELOP_CONF="pelicanconf.py" 
PUBLISH_CONF="publishconf.py" 

OUTPUT_DIR="output" 
REMOTE_DIR="remote" 

PY_CMD="python3" 
SERVER="http.server" 
PORT="8000" 

rootPath="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 

generate_site() { 
    # Based on http://zonca.github.io/2013/09/automatically-build-pelican-and-publish-to-github-pages.html 
    if [ "$TRAVIS" == "true" ]; then 
    # Ensure that builds triggered by pull requests are not deployed 
    if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then 
     echo "Successfully built pull request #$TRAVIS_PULL_REQUEST." 
     exit 0 
    fi 

    echo "Deploying site to $GH_PAGES_BRANCH branch of $TARGET_REPO." 
    git config --global user.email "[email protected]" 
    git config --global user.name "Travis CI" 
    else 
    cd "$rootPath" || exit 1 
    pelican -s $PUBLISH_CONF 
    fi 

    # Pull hash and commit message of the most recent commit 
    commitHash=$(git rev-parse HEAD) 
    commitMessage=$(git log -1 --pretty=%B) 

    # Clone the GitHub Pages branch and rsync it with the newly generated files 
    GITHUB_REPO=https://${GH_TOKEN:-git}@github.com/${TARGET_REPO}.git 
    git clone --branch $GH_PAGES_BRANCH --depth 1 "$GITHUB_REPO" $REMOTE_DIR &> /dev/null 
    rsync -r --exclude=.git --delete $OUTPUT_DIR/ $REMOTE_DIR/ 
    pushd $REMOTE_DIR > /dev/null 

    git add -A 
    git status -s 

    $1 # execute the function that was passed as an argument 
} 

push_changes() { 
    if [ "$TRAVIS" == "true" ]; then 
    longMessage="Generated by $commitHash; pushed by build #$TRAVIS_BUILD_NUMBER." 
    git commit -m "$commitMessage" -m "$longMessage" 
    git push origin $GH_PAGES_BRANCH &> /dev/null || echo "Push failed." 
    else 
    read -rp "Push changes to GitHub Pages? [y/N] " response 
    if [[ "$response" =~ ^[Yy]$ ]]; then 
     git commit -m "$commitMessage" -m "Generated by $commitHash." 
     git push origin $GH_PAGES_BRANCH 
    fi 

    popd > /dev/null 
    rm -rf -- $REMOTE_DIR $OUTPUT_DIR && echo "Removed $REMOTE_DIR and $OUTPUT_DIR." 
    fi 
} 

case "$1" in 
    'deploy') 
    generate_site push_changes 
    ;; 

    'diff') 
    generate_site 'git --no-pager diff --cached --color-words' 
    ;; 

    'serve') 
    developPath=${rootPath}/develop 
    local_ip=$(ifconfig | grep 'inet ' | awk 'NR==2 {print $2}') 

    # Seed directory with site content 
    cd "$rootPath" && pelican -s $DEVELOP_CONF > /dev/null 
    echo "Serving HTTP at $(tput bold)${local_ip}:${PORT}$(tput sgr0)." 

    cleanup() { 
     pkill -f $SERVER 
     cd "$rootPath" && rm -r "$developPath" && echo && exit 0 
    } 

    trap cleanup SIGINT 

    (pelican -rs $DEVELOP_CONF 2> /dev/null) & 
    (cd "$developPath" || exit 1; $PY_CMD -m $SERVER $PORT 1> /dev/null) & 
    wait 
    ;; 

    *) 
    echo "$usage" 
    exit 2 
    ;; 

esac 
+0

스크립트는 404입니다. – koppor

0

맥 OS 엘 카피가 필요 루비^2.2

brew unlink ruby; brew install Ruby 
gem install travis 

를 사용하여 비밀 PAT를 암호화하는 트래비스의 보석 및 .travis.yml

travis encrypt GH_TOKEN=<secret github personal access token> --add 
관련 문제