私はこれを持っています:
curl -L "https://github.com/cmtr/cp-go-api/tarball/$commit_id" | tar x -C "$project_dir/"
githubからtarballをダウンロードして既存のディレクトリに抽出したいと思います。問題は、次のエラーが発生することです。
Step 10/13 : RUN curl -L "https://github.com/channelmeter/cp-go-api/tarball/$commit_id" | tar x -C "$project_dir/"
---> Running in a883449de956
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9 100 9 0 0 35 0 --:--:-- --:--:-- --:--:-- 35
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
The command '/bin/sh -c curl -L "https://github.com/channelmeter/cp-go-api/tarball/$commit_id" | tar x -C "$project_dir/"' returned a non-zero code: 2
なぜtarアーカイブではないのか知っている人はいますか?ブラウザでgithub.comにアクセスして次のパターンを入力すると、tar.gzアーカイブがダウンロードされます。
https://github.com/<org>/<repo>/tarball/<sha>
なぜ動作しないのか分かりません。
答え1
したがって、資格情報を希望するGithubに帰結します。 2段階認証プロセスがない場合は、カールを使用して次のことができます。
curl -u username:password https://github.com/<org>/<repo>/tarball/<sha>
ただし、2段階認証プロセスの設定がある場合は、Githubアクセストークンを使用し、次のようにgithub.comの代わりにapi.github.comを使用する必要があります。
curl -L "https://api.github.com/repos/<org>/<repo>/tarball/$commit_sha?access_token=$github_token" | tar -xz -C "$extract_dir/"
アクセストークンの内容はここで説明されています。 https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line
答え2
別の方法はGitHub Cookieを使用することです。それでも通常のユーザー/パスワードで始まりますが、最初の要求の後にクッキーを利用して追加の要求を行うことができます。以下はPHPの例です。
<?php
# GET
$get = curl_init('https://github.com/login');
curl_setopt($get, CURLOPT_COOKIEJAR, 'github.txt');
curl_setopt($get, CURLOPT_RETURNTRANSFER, true);
$log = curl_exec($get);
curl_close($get);
# POST
preg_match('/name="authenticity_token" value="([^"]*)"/', $log, $auth);
$pf['authenticity_token'] = $auth[1];
$pf['login'] = getenv('USER');
$pf['password'] = getenv('PASS');
$post = curl_init('https://github.com/session');
curl_setopt($post, CURLOPT_COOKIEFILE, 'github.txt');
curl_setopt($post, CURLOPT_POSTFIELDS, $pf);
curl_exec($post);
-b github.txt
その後、とともにシェルcURLを使用することも、PHP cURLを使用することもできますCURLOPT_COOKIEFILE github.txt
。上記と同じであることを確認してくださいcurl_close
。それ以外の場合は、クッキーファイルが必要な後に作成されます。