Gitlab CIランナーを使用してコードをテストし、いくつかのファイルを生成しています。生成されたファイルをCIランナー経由でgitlabリポジトリにプッシュしたいだけです。それを行う方法はありますか?
私はこれを行うことでこの問題を解決しました:
User Settings > Access Tokens
Your project > Settings > Secret variable
-> edit:非保護ブランチへのgit Pushを行いたい場合は、ランナー変数を保護として設定しないでください
次に、gitlab-ciスクリプトでデフォルトの代わりにこのトークンを使用できます。例えば :
before_script:
- git remote set-url Origin https://USERNAME:${CI_Push_TOKEN}@gitlab.com/your-project.git
- git config --global user.email '[email protected]'
- git config --global user.name 'yourname'
...
- git checkout -B branch
- change files
- git commit -m '[skip ci] commit from CI runner'
- git Push --follow-tags Origin branch
GitlabでSSHキーを生成しました
->プロファイル設定-> SSHキー->生成
GitlabでSSHキーストアを生成した後variables named [〜#〜] ssh [〜#〜]
->プロジェクト設定->変数->変数の追加
.gitlab-ci.ymlに以下の行を追加します。
before_script:
- mkdir -p ~/.ssh
- echo "$SSH" | tr -d '\r' > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-keyscan -H 'Git_Domain' >> ~/.ssh/known_hosts
その後、以下のjsコードを使用して、ファイルをリポジトリにプッシュしました。
var child_process = require("child_process");
child_process.execSync("git checkout -B 'Your_Branch'");
child_process.execSync("git remote set-url Origin Your_Repository_Git_Url");
child_process.execSync("git config --global user.email 'Your_Email_ID'");
child_process.execSync("git config --global user.name 'Your_User_Name'");
for (var i=0;i<filesToBeAdded.length;i++) {
child_process.execSync("git add "+filesToBeAdded[i]);
}
var ciLog = child_process.execSync("git commit -m '[skip ci]Automated commit for CI'");
var pushLog = child_process.execSync("git Push Origin Your_Branch");
[skip ci]はコミットメッセージで最も重要です。それ以外の場合、CIプロセスの無限ループが開始されます。
もちろんSSHキーを使用できますが、ユーザーとパスワード(書き込みアクセス権を持つユーザー)をシークレット変数として提供し、使用することもできます。
例:
before_script:
- git remote set-url Origin https://$GIT_CI_USER:[email protected]/$CI_PROJECT_PATH.git
- git config --global user.email '[email protected]'
- git config --global user.name 'MyUser'
GIT_CI_USER
とGIT_CI_PASS
をシークレット変数として定義する必要があります(この目的のために常に専用ユーザーを作成できます)。
この構成では、通常gitで作業できます。この方法を使用して、リリース後にタグをプッシュします(Axion Release Gradle Pluingを使用- http://axion-release-plugin.readthedocs.io/en/latest/index.html )
リリースジョブの例:
release:
stage: release
script:
- git branch
- gradle release -Prelease.disableChecks -Prelease.pushTagsOnly
- git Push --tags
only:
- master
お探しの機能は、アーティファクトと呼ばれます。アーティファクトは、成功したときにビルドに添付されるファイルです。
アーティファクトを有効にするには、これを.gitlab-ci.ymlに入れます:
artifacts:
paths:
- dir/
- singlefile
これにより、dir
ディレクトリとファイルsinglefile
がGitLabにアップロードされます。