個人用アクセストークンを使用してGitHubで認証しようとしています。 githubのヘルプファイルでは、cURLメソッドを使用して認証することを記載しています( https://help.github.com/articles/creating-an-access-token-for-command-line-use =)。私はこれを試しましたが、GitHubにプッシュできません。認証されていないサーバー(Travis-CI)からプッシュしようとしていることに注意してください。
cd $HOME
git config --global user.email "[email protected]"
git config --global user.name "username"
curl -u "username:<MYTOKEN>" https://github.com/username/ol3-1.git
git clone --branch=gh-pages https://github.com/username/ol3-1.git gh-pages
cd gh-pages
mkdir buildtest
cd buildtest
touch asdf.asdf
git add -f .
git commit -m "Travis build $TRAVIS_BUILD_NUMBER pushed to gh-pages"
git Push -fq Origin gh-pages
このコードはエラーを引き起こします:
リモート:scuzzlebuzzle/ol3-1.gitへの匿名アクセスが拒否されました。
致命的:「 https://github.com/scuzzlebuzzle/ol3-1.git/ '」の認証に失敗しました
curl
コマンドは完全に間違っています。次を使用する必要があります
curl -H 'Authorization: token <MYTOKEN>' ...
それはさておき、それが実際にプライベートである場合、それはあなたのコンピュータがリポジトリをクローンすることを許可しません。 (ただし、見てみるとそうではないことがわかります。)通常は次のようにします。
git clone https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git --branch=gh-pages gh-pages
これにより、リポジトリのクローン作成時に作成されたリモートに資格情報が追加されます。ただし、残念ながら、Travisがリポジトリを複製する方法を制御することはできないため、リモートをそのように編集する必要があります。
# After cloning
cd gh-pages
git remote rm Origin
git remote add Origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
これにより、資格情報が組み込まれたリモートを使用するようにプロジェクトが修正されます。
Sigmavirus24の応答では、Travisにかなり広いアクセス許可を持つトークンを与える必要があることに注意してください。GitHubは、「すべてのパブリックリポジトリを書き込む」または「プライベートリポジトリをすべて書き込む」などの幅広いスコープを持つトークンのみを提供するためです。
(もう少し手間をかけて)アクセスを制限したい場合は、GitHubデプロイメントキーをTravis暗号化yamlフィールドと組み合わせて使用できます。
これがスケッチテクニックの仕組みです...
最初にssh-keygen
というRSAデプロイキーを生成し(my_key
経由)、githubリポジトリ設定にデプロイキーとして追加します。
その後...
$ password=`openssl Rand -hex 32`
$ cat my_key | openssl aes-256-cbc -k "$password" -a > my_key.enc
$ travis encrypt --add password=$password -r my-github-user/my-repo
次に、$password
ファイルを使用して、yamlファイルに追加することにより、統合時にデプロイキーを復号化します。
before_script:
- openssl aes-256-cbc -k "$password" -d -a -in my_key.enc -out my_deploy_key
- echo -e "Host github.com\n IdentityFile /path/to/my_deploy_key" > ~/.ssh/config
- echo "github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==" > ~/.ssh/known_hosts
注:最後の行はgithubのRSAキーを事前に入力するため、接続時に手動で受け入れる必要がありません。
自動化/ OAuthトークンを使用したGit自動化
$ git clone https://github.com/username/repo.git
Username: your_token
Password:
git Push
コマンドでも機能します。
リファレンス: https://help.github.com/articles/git-automation-with-oauth-tokens/
まず、パーソナルアクセストークン(PAT)を作成する必要があります。これはここで説明されています: https://help.github.com/articles/creating-an-access-token-for-command-line-use/
恐らく、この記事ではそれを作成する方法を説明していますが、どうすればよいのかまったくわかりません。約1時間のトロールドキュメントとStack Overflowの後、私は最終的に答えを見つけました。
$ git clone https://github.com/user-or-organisation/myrepo.git
Username: <my-username>
Password: <my-personal-access-token>
私は実際にリモートで作業中に会社のポリシーによって two-factor authentication を有効にしなければならなかったので、実際にはローカルの変更があったため、実際にはclone
ではなく、Push
でした。リモートを削除して再作成するために必要な多くの場所を読みましたが、実際には、通常のPush
コマンドは上記のclone
とまったく同じように機能し、リモートは変更されませんでした。
$ git Push https://github.com/user-or-organisation/myrepo.git
Username: <my-username>
Password: <my-personal-access-token>
(@YMHuangはドキュメンテーションリンクで私を正しい道に導いた。)
これは私のために働いたsshを使用して:
設定→開発者設定→新しいトークンを生成.
git remote rm Origin
git remote add Origin https://[APPLICATION]:[NEW TOKEN]@github.com/[ORGANISATION]/[REPO].git
GitHubトークンの適用に非常に多くの時間を費やすことで、最終的に次のように機能します。
$ cf_export GITHUB_TOKEN=$(codefresh get context github --decrypt -o yaml | yq -y .spec.data.auth.password)
%d%H%M
一致ワード'-123456-whatever'
完全なコードは次のとおりです。
version: '1.0'
steps:
get_git_token:
title: Reading Github token
image: codefresh/cli
commands:
- cf_export GITHUB_TOKEN=$(codefresh get context github --decrypt -o yaml | yq -y .spec.data.auth.password)
main_clone:
title: Updating the repo
image: Alpine/git:latest
commands:
- git clone https://chetabahana:[email protected]/chetabahana/compose.git
- cd compose && git remote rm Origin
- git config --global user.name "chetabahana"
- git config --global user.email "[email protected]"
- git remote add Origin https://chetabahana:[email protected]/chetabahana/compose.git
- sed -i "s/-[0-9]\{1,\}-\([a-zA-Z0-9_]*\)'/-`date +%d%H%M`-whatever'/g" cloudbuild.yaml
- git status && git add . && git commit -m "fresh commit" && git Push -u Origin master
出力...
On branch master
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: cloudbuild.yaml
no changes added to commit (use "git add" and/or "git commit -a")
[master dbab20f] fresh commit
1 file changed, 1 insertion(+), 1 deletion(-)
Enumerating objects: 5, done.
Counting objects: 20% (1/5) ... Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 33% (1/3) ... Writing objects: 100% (3/3), 283 bytes | 283.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 0% (0/2) ... (2/2), completed with 2 local objects.
To https://github.com/chetabahana/compose.git
bbb6d2f..dbab20f master -> master
Branch 'master' set up to track remote branch 'master' from 'Origin'.
Reading environment variable exporting file contents.
Successfully ran freestyle step: Cloning the repo