当前位置:  开发笔记 > 开发工具 > 正文

如何从Travis CI发布到Github Pages?

如何解决《如何从TravisCI发布到GithubPages?》经验,为你挑选了4个好方法。

我们正在travis-ci服务器上编译Doxygen文档,并希望将它们推送到我们的gh-pages分支.

我该如何处理授权git push?有人在travis-ci中有一个使用加密变量的例子吗?我应该使用https授权还是SSH密钥?



1> Ciro Santill..:

在环境变量中使用HTTPS API令牌的分步示例

其他人已提到它,但这里有一个更详细的程序.

    为网站创建单独的存储库(可选).这将降低您覆盖主存储库的可能性,并使输出文件不会污染它.

    在https://github.com/settings/tokens下获取个人访问令牌

    仅对公共存储库启用"public_repo"访问,对私有启用"repo".

    将令牌保存在某处,因为您只能看到它一次.

    在存储库的Travis设置上https://travis-ci.org///settings创建一个环境变量:

    GITHUB_API_KEY=
    

    并确保将"在构建日志中显示值"标记为"关闭".

    这是安全的,因为只有您通过授权推送才能看到这样的环境变量,因此如果恶意用户尝试发出拉取请求来获取您的字符串,则该变量将不存在.

    只需确保您永远不会在您的构建中列出您的环境变量!

    将以下内容添加到您的.travis.yml:

    after_success: |
      if [ -n "$GITHUB_API_KEY" ]; then
        cd "$TRAVIS_BUILD_DIR"
        # This generates a `web` directory containing the website.
        make web
        cd web
        git init
        git checkout -b gh-pages
        git add .
        git -c user.name='travis' -c user.email='travis' commit -m init
        # Make sure to make the output quiet, or else the API token will leak!
        # This works because the API key can replace your password.
        git push -f -q https://:$GITHUB_API_KEY@github.com//-gh-pages gh-pages &>/dev/null
        cd "$TRAVIS_BUILD_DIR"
      fi
    

替代travis加密方法

详细解释:https://stackoverflow.com/a/33109519/895245

GITHUB_API_KEY=使用travisgem 加密字符串,并将其添加到您的.travis.yml:

env:
  secure: 

这样做的好处是它不需要使用Travis Web界面,但需要使用Gem和更多的复制粘贴.


@nn0p这只是标准的YAML多行字符串表示法:http://stackoverflow.com/questions/3790454/in-yaml-how-do-i-break-a-string-over-multiple-lines
@Arcrammer肯定.但是这个问题如何解释为其他服务器呢?例如:是否有任何其他服务支持Travis CI?
我认为`https:// :$ GITHUB_API_KEY @ github.com`可能需要是`https:// $ GITHUB_API_KEY:@ github.com`或`https:// $ GITHUB_API_KEY @ github.com`.

2> Yann TM..:

我不知道它是最近的,但Travis现在有一个内置的部署选项,基本上添加到你的travis文件:

deploy:
  provider: pages
  skip_cleanup: true
  local_dir: myfolder/  # or remove this line to upload from root of repo
  github_token: $GITHUB_TOKEN # Set in travis-ci.org dashboard
  on:
    branch: master

确保上传的文件夹中没有.gitignore; 它只上传未被忽略的文件.

请参阅travis的在线官方文档:https: //docs.travis-ci.com/user/deployment/pages/

使用"存储库设置"方法没有公钥问题,您在Github中生成密钥,然后将其粘贴到Travis的秘密/非可见字段中.

上传历史记录问题: 请注意,每次上传都会破坏之前上传的所有数据,而不保留历史记录.

您现在可以(2017年11月以上)通过添加keep_history: true一行来保留历史记录

这可能是合乎需要的,因为这些快照构建可能非常庞大,并且无论如何都可以随意重现(只需将您的软件仓库从您想要的修订版中分支出来).指向此类工件通常指向最后一次成功构建快照.

但是要触发存储到稳定的位置,只需编辑你的travis以添加标志:
target_branch:分支以推动力,默认为gh-pages
例如target_branch:rc1.2

并在将其设置回快照模式之前运行一次.

可能对发布有用的另一种替代方法(我没有经过亲自测试)是发布到标签请参阅:https://docs.travis-ci.com/user/deployment/releases/



3> joshua-ander..:

这里的travis-ci文档建议添加它以推送到git repo:

after_success:
   - chmod 600 .travis/deploy_key.pem # this key should have push access
   - ssh-add .travis/deploy_key.pem
   - git remote add deploy DEPLOY_REPO_URI_GOES_HERE
   - git push deploy

但是,这是不安全的,因为它将您未受保护的私钥存储在github存储库中.

相反,您可以使用travis工具将ssh密钥添加为加密环境变量:

travis encrypt DEPLOY_KEY= --add env.matrix

现在您只需将此行添加到after_success的开头:

cat $DEPLOY_KEY > .travis/deploy_key.pem

请注意,after_success将在构建矩阵中的每个构建中切换,因此如果每个构建中有多个作业,则代码将被多次推送,这将无法做任何事情,但很高兴知道它正在发生.


我使用加密文件的选项解决了密钥太长的问题:http://docs.travis-ci.com/user/encrypting-files/

4> Stasik..:

只是为了添加另一个解决方案,我使用了来自github的HTTPS令牌,对其加密并使用HTTPS进行检查和推送

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有