2014-09-24 22 views
5

Tôi có một repo gitub.io lưu trữ trang web của tôi - nguồn cho trang web đó (mã Ngọc/Sass chưa được biên soạn) nằm trong repo công cộng riêng biệt. Travis-CI được thiết lập để xem mã nguồn của tôi để thay đổi và chạy bộ biên dịch, tạo HTML/CSS sẽ được đẩy tới repo github.io.tự động đẩy vào repo github với travis

Tôi có thể thiết lập Travis để tự động thực hiện thao tác đẩy nếu tôi biên dịch, không mã hóa tên người dùng và mật khẩu của tôi vào tệp .travis.yml của mình (rõ ràng đây là mối quan ngại về bảo mật) không?

Tôi đã xem this question nhưng chưa được Travis trả lời - Tôi không nghĩ mình có thể sử dụng xác thực cặp khóa vì tôi cần đặt khóa riêng trong repo hoặc trong tập lệnh du lịch , đó chỉ là một lỗ hổng bảo mật lớn như đặt mật khẩu của tôi.


Đối với bất kỳ ai khác gió lên ở đây, tôi thấy các thông tin sau bằng câu trả lời roidrage như một bàn đạp:

  1. Travis sử dụng public/private mã hóa khóa để cho phép bạn nhúng thông tin nhạy cảm trong một .travis.yml tệp. Bạn có thể cài đặt viên ngọc của mình được gọi là "travis" và sử dụng nó để mã hóa nội dung, và họ sẽ giải mã nó một cách an toàn khi kết thúc. Tài liệu: http://docs.travis-ci.com/user/encryption-keys/

  2. Trên github, bạn có thể tạo "mã thông báo truy cập cá nhân" trong applications settings của mình. Điều này có thể được sử dụng như mật khẩu của các ứng dụng. Mã hóa bằng cách sử dụng kỹ thuật trên và ném nó vào yaml của bạn.

+0

Travis yêu cầu một biến ('SOMEVAR'). Tôi nên sử dụng biến nào? – koppor

+1

@koppor tôi không biết. nếu nó giúp, đây là một repo trong đó tôi sử dụng travis để biên dịch một tập tin markdown vào pdf và sau đó đẩy pdf biên dịch trở lại vào repo: https://github.com/ahemmeter/ahemmeter.github.io –

+1

trong trường hợp của tôi, tôi đã mã hóa khóa cá nhân ssh (khóa triển khai) bằng cách sử dụng đá quý travis. tôi đã lưu trữ khóa riêng được mã hóa trong repo. travis tải xuống repo, giải mã khóa cá nhân, và sau đó đẩy trở lại repo bằng cách sử dụng khóa đã giải mã. –

Trả lời

4

Điều này có thể đạt được bằng cách lưu trữ mã thông báo để truy cập GitHub theo cách được mã hóa trong tệp .travis.yml. Xem docs của chúng tôi để biết các ví dụ về cách mã hóa dữ liệu.

Để được đẩy lên trang GitHub, có blog post tổng hợp các bước khá tốt và thậm chí là chỉ đến a script mà bạn có thể sử dụng trong bản dựng của mình.

Một gương của kịch bản là ở đây:

#!/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

Tập lệnh là 404. – koppor

0

Mac OS El Capitan đòi hỏi của Ruby^2,2

brew unlink ruby; brew install Ruby 
gem install travis 

Sử dụng đá quý travis để mã hóa PAT bí mật của bạn và cập nhật .travis.yml

của bạn
travis encrypt GH_TOKEN=<secret github personal access token> --add 
Các vấn đề liên quan