如何使用Travis CI环境变量+ .sh脚本自动部署到Github页面?

时间:2016-12-09 19:30:10

标签: shell unix continuous-integration travis-ci github-pages

更新:这是有效的,但需要微调(见下文)

  

回购链接: https://github.com/oneezy/sweet-element
   Travis CI链接: https://travis-ci.org/oneezy/sweet-element

自动化:Travis CI + Github Pages

为了更详细地解释我的目标是什么,我试图简化我的Github + Travis CI工作流程,其中包含存储在{{1}中的2个环境变量GH_TOKEN + GH_REF和一个可执行的.travis.yml shell脚本,用于自动部署演示和放大器从命令行我gpages_build.sh时,向Github页面on_success:发送文档。我想以这样的方式创建我的git push,以便永远不必手动编辑,以便智能足以生成.travis.yml所需的值取决于已存在的信息(下面有更多详细信息)。


我已经关注了2篇博文,这些博文让我现在已经到了这一点:

教程1: How to build Polymer components with Github and Travis CI
教程2: Automatic github pages deployment for Polymer elements with Travis CI

当前工作设置✔

从Github创建"个人访问令牌"
使用GH_REF命令将travis encrypt环境变量添加到GH_TOKEN
添加.travis.yml环境变量
使用GH_REF: github.com/oneezy/sweet-element设置其他所有内容
使用.travis.yml自动部署到Github Pages
使gpages_build.sh可执行文件w / gpages_build.sh
git update-index --chmod=+x gpages_build.sh并观看所有内容

问题✖

git push中手动编写GH_REF值是重复/乏味的
手写.travis.yml是重复/乏味的

可能的解决方案&有问题吗?

我可以使用已存在的信息动态生成git update-index --chmod=+x gpages_build.sh值吗?
我可以从GH_REFbower.json提取信息以生成package.json值吗?
我可以从GH_REF提取信息以生成git config值吗?
Travis CI是否提供可用于代替GH_REF的任何变量?
如何为所有项目制作GH_REF脚本可执行文件?
我可以从整个不同的仓库执行gpages_build.sh脚本吗?
我可以从gpages_build.sh生成gpages_build.sh脚本吗?

代码......

.travis.yml (Github Link)

.travis.yml


gpages_build.sh (Github Link)

language: node_js
node_js: stable
sudo: required
dist: trusty
addons:
  firefox: latest
  apt:
    sources:
    - google-chrome
    packages:
    - google-chrome-stable

install:
- npm install -g bower polymer-cli
- npm install
- bower install

script:
- xvfb-run polymer test

after_success:
- if [ "$TRAVIS_BRANCH" = "master" ]; then 
  ./gpages_build.sh oneezy sweet-element "Justin O'Neill'" justin@oneezy.com; fi

env:
  global:
    - GH_REF: github.com/oneezy/sweet-element
    - secure: p1OHpnsMIpMjQ4yiFAZJoDZBr/5VHXel+HHC9s8O+MvIqyv5IdxNexkmQKYJneDfYG8XZ/8aNoP4Bsiycysw5POCX1Z9BAwkEBIQ8rdgslzNoWronbtAZUBQAUFxQoVaKt1hBLXNpfyrfRGIfNtAKgA8pekurvIcgjnPmzsNGWr1ztj2y7/5mR7VZZQy3bcM9cZNZLUymyr+RENOXufJnPG2ve/yha/VynUz2mPWEIQPPhg17ar2ICWZL0EZjG6lajR5g83TtSrDxRN2tTGpVWlKVi6udDB/JU+RLt744qhblXwRpFqh1E7r2xUxJWvibQt+UtuRwi6iNJxAy40/XW6Ss/unkwjmRZgU+G98Z3ojJj8Nrp9xah0H2S6M2CH8ySYHnBO6FhunQ3oeXYUn7mYyRiWRz1sjBn0rhWorD67pBFRKIRKFjPPlD9BuI/l/mD8ulgLa7IJFnkt5ZHJx3cWU/BGQ8xLcfor4SgkE4sxlZQWkkn2m2gwvw33JJP6Vv97cs/mgEYORVlBGdG5eAQc1+k18sbGTbbZZojJr5wp4c9VrnDKA7Ztt70ygSHn4etQRogngKPsrKHWnK2q1zBlWoTDq5zjdYZFQt+VC8fET87VUH5Rl7Cn9Chjg8ybY1a4Dq4zKM4uJVKsAYtL+GYNS/kQ/Vgpsd+UTVGx/lDA=

2 个答案:

答案 0 :(得分:2)

  

我正在尝试简化我的Github + Travis CI工作流程,其中包含存储在GH_TOKEN中的2个环境变量GH_REF + .travis.yml ...

git clone "https://${GH_TOKEN}@${GH_REF}" --single-branch

您的脚本可以使用the documentation

中引用的TRAVIS_REPO_SLUG环境变量

答案 1 :(得分:1)

我设法做了一切我想。

我的目标

  • 使用GH_REF gpages_build.sh脚本自动TRAVIS_REPO_SLUG值(感谢提示@osowskit!)
  • 写一次git update-index --chmod=+x gpages_build.sh并将其存储在自己的回购中......当需要它时,只需bower install它!

✔过程

这是我在成功构建后用于创建和测试<custom-elements> w / Travis CI 并自动部署到 Github页面的确切方法。


gpages_build.sh(script):

  1. 为了避免必须在每个项目中使用git update-index --chmod=+x gpages_build.sh命令使我的脚本可执行,我需要将这个过程集中在一个方便的Github repo oneezy/build-tools)< / em>的。这样做的好处是:
    • 只需要使脚本可执行一次
    • 能够在一个地方(不是每个回购站)根据需要更新脚本<​​/ li>
    • 确保当其他人克隆项目时,他们将始终拥有可执行文件文件
  2. 为了使GH_REF变量自动化并且不必每次都写出来,Travis CI为我们提供了TRAVIS_REPO_SLUG变量,对于任何Github存储库,它基本上都是username/repo正在努力。你这样写出来:GH_REF="github.com/${TRAVIS_REPO_SLUG}"
  3. ```

    # This script pushes a demo-friendly version of your element and its
    # dependencies to gh-pages.
    
    # usage gp Polymer core-item [branch]
    # Run in a clean directory passing in a GitHub org and repo name
    
    GH_REF="github.com/${TRAVIS_REPO_SLUG}"
    
    org=`echo ${TRAVIS_REPO_SLUG} | cut -f 1 -d /`
    repo=`echo ${TRAVIS_REPO_SLUG} | cut -f 2 -d /`
    
    name="Travis CI"
    email="builds@oneezy.com"
    branch=${3:-"master"} # default to master when branch isn't specified
    
    mkdir temp && cd temp
    
    # make folder (same as input, no checking!)
    mkdir $repo
    git clone "https://${GH_TOKEN}@${GH_REF}" --single-branch
    
    # switch to gh-pages branch
    pushd $repo >/dev/null
    git checkout --orphan gh-pages
    
    # remove all content
    git rm -rf -q .
    
    # use bower to install runtime deployment
    bower cache clean $repo # ensure we're getting the latest from the desired branch.
    git show ${branch}:bower.json > bower.json
    echo "{
      \"directory\": \"components\"
    }
    " > .bowerrc
    bower install
    bower install $org/$repo#$branch
    git checkout ${branch} -- demo
    rm -rf components/$repo/demo
    mv demo components/$repo/
    
    # redirect by default to the component folder
    echo "<META http-equiv="refresh" content=\"0;URL=components/$repo/\">" >index.html
    
    git config user.name $name
    git config user.email $email
    
    # send it all to github
    git add -A .
    git commit -am 'Deploy to GitHub Pages'
    git push --force --quiet -u "https://${GH_TOKEN}@${GH_REF}" gh-pages > /dev/null 2>&1
    
    popd >/dev/null
    

    ```

    Travis.yml配置:

    1. 让我离开的一个 GOTCHA GH_TOKEN变量,这是您需要Github的 Personal Access Token 对存储库的读/写功能。由于此令牌具有此功能,我需要使用Travis CLI (Travis命令行工具)对其进行加密。 travis encrypt GH_TOKEN=********* --add,会自动将加密变量添加到.travis.yml文件中。我的印象是我可以为每个回购使用相同的加密 GH_TOKEN,但我发现情况并非如此。当您使用Travis加密任何内容时,您实际上将该加密绑定到您所在的存储库,E.G。:您必须在每个存储库中travis encrypt GH_TOKEN=********* --add。一种可能的解决方法是在config文件中配置一个别名/命令,这个信息存储在里面,但我还没有探索过这个理论。

    2. 接下来要做的是bower install -s gpages_build.sh脚本,并从.travis.yml w / ./bower_components/build-tools/gpages_build.sh运行。这将自动从我们的build-tools repo中提取脚本并运行它。

    3. ```

      language: node_js
      node_js: stable
      sudo: required
      dist: trusty
      
      addons:
        firefox: latest
        apt:
          sources:
          - google-chrome
          packages:
          - google-chrome-stable
      
      cache:
        directories:
        - node_modules
        - "$HOME/.cache/bower"
      
      install:
      - npm install -g bower polymer-cli
      - npm install
      - bower install
      
      script:
      - xvfb-run polymer test
      
      after_success:
      - if [ ${TRAVIS_PULL_REQUEST} = "false" ] && [ "$TRAVIS_BRANCH" = "master" ]; then
        bower install -s oneezy/build-tools && ./bower_components/build-tools/gpages_build.sh;
        fi
      
      # DO EVERY TIME: 
      # travis encrypt GH_TOKEN=**************** --add  
      # env:
      #   global:
      #     secure: ZwNuFN1cryC5dff4c3a1qePkoRZoug+HDiN55dFATTt7Opk20C8SgO+RGEWqYWelFkUN2jhAyoJ91GFMxOyYqbqZP+mQfBaFWgBZoKIcGcDur5in4z6ZaWfw65X03K0HIaaKaunpO4C1d/d++zMhqvudhaJ4JgXJXts5cUdmXGxCIEhKE+mH5d76VK4fbpyrtpewllqHeaiIE88oFZ0L8xQP8K7SUXukvVmE1Re0Kl0UjXjsdSUftcj+gnOcBxqGjVlSjQ9Bk0zmP+2nHYo8Gx=
      

      ```

      瞧!