web-dev-qa-db-ja.com

CIランナーを介してファイルをgitlab-ciにプッシュする

Gitlab CIランナーを使用してコードをテストし、いくつかのファイルを生成しています。生成されたファイルをCIランナー経由でgitlabリポジトリにプッシュしたいだけです。それを行う方法はありますか?

15
Venkat

私はこれを行うことでこの問題を解決しました:

  1. APIスコープで新しいgitlabアクセストークンを生成します:User Settings > Access Tokens
  2. 新しいトークンを使用して、保護されたCI変数をプロジェクト設定に追加します: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
15
jmuhire

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プロセスの無限ループが開始されます。

8
Venkat

もちろん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_USERGIT_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
2
Przemek Nowak

お探しの機能は、アーティファクトと呼ばれます。アーティファクトは、成功したときにビルドに添付されるファイルです。

アーティファクトを有効にするには、これを.gitlab-ci.ymlに入れます:

artifacts:
  paths:
    - dir/
    - singlefile

これにより、dirディレクトリとファイルsinglefileがGitLabにアップロードされます。

1
Fairy