GitLabプロジェクトがGitLab CIで構成されている場合、ビルドをローカルで実行する方法はありますか?
私はラップトップをビルドの「ランナー」にしたくありません。Dockerと.gitlab-ci.yml
を利用して、テストをローカルで実行します(つまり、すべて事前に構成されています)。もう1つの利点は、ローカルおよびCIで同じ環境を使用していると確信していることです。
Dockerを使用してTravisビルドをローカルで実行する方法 の例を次に示します。GitLabと似たようなものを探しています。
数か月前からgitlab-runner
を使用してこれを行うことができます。
gitlab-runner exec docker my-job-name
これを機能させるには、コンピューターに docker と gitlab-runner
の両方をインストールする必要があることに注意してください。
.gitlab-ci.yml
ファイルで定義されているimage
キーも必要です。そうでなければ動作しません。
gitlab-runner
を使用してローカルでテストするために現在使用している行は次のとおりです。
gitlab-runner exec docker test --docker-volumes "/home/elboletaire/.ssh/id_rsa:/root/.ssh/id_rsa:ro"
編集:
--docker-volumes
にデフォルトで設定されているキーで/etc/gitlab-runner/config.toml
を追加することを避けることができます。 詳細については公式ドキュメントを参照 。
コメントの混乱のため、gitlab-runner --help
の結果をここに貼り付けたので、gitlab-runnerがローカルでビルドできることがわかります。
gitlab-runner --help
NAME:
gitlab-runner - a GitLab Runner
USAGE:
gitlab-runner [global options] command [command options] [arguments...]
VERSION:
1.1.0~beta.135.g24365ee (24365ee)
AUTHOR(S):
Kamil Trzciński <[email protected]>
COMMANDS:
exec execute a build locally
list List all configured runners
run run multi runner service
register register a new runner
install install service
uninstall uninstall service
start start service
stop stop service
restart restart service
status get status of a service
run-single start single runner
unregister unregister specific runner
verify verify all registered runners
artifacts-downloader download and extract build artifacts (internal)
artifacts-uploader create and upload build artifacts (internal)
cache-archiver create and upload cache artifacts (internal)
cache-extractor download and extract cache artifacts (internal)
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--debug debug mode [$DEBUG]
--log-level, -l "info" Log level (options: debug, info, warn, error, fatal, panic)
--cpuprofile write cpu profile to file [$CPU_PROFILE]
--help, -h show help
--version, -v print the version
ご覧のとおり、exec
コマンドはexecute a build locally
です。
このプロセスは、独自のマシンを使用して、Dockerコンテナを使用してテストを実行することに注意してください。このは、カスタムランナーを定義するためではありません。これを行うには、レポのCI/CD設定に移動し、そこでドキュメントを読んでください。 gitlab.comのランナーの代わりにランナーを実行したい場合は、ランナーにカスタムの一意のタグを追加し、タグ付きジョブのみを実行し、ランナーに責任のあるすべてのジョブにタグを付けます。
Dockerイメージを使用してGitlabを実行している場合: https://hub.docker.com/r/gitlab/gitlab-ce 、ローカルdocker.sock
を公開することでパイプラインを実行することができますボリュームオプション:-v /var/run/docker.sock:/var/run/docker.sock
。このオプションをGitlabコンテナーに追加すると、ワーカーはホスト上のdockerインスタンスにアクセスできます。
GitLabランナーはWindowsではまだ動作していないようで、 これを解決するための未解決の問題 があります。
そのため、当面はスクリプトコードをbashスクリプトに移動します。これを簡単に dockerコンテナーにマップ ローカルで実行して実行できます。
この場合、仕事でdockerコンテナーを構築したいので、スクリプト 'build'を作成します。
#!/bin/bash
docker build --pull -t myimage:myversion .
.gitlab-ci.yamlでスクリプトを実行します。
image: docker:latest
services:
- docker:dind
before_script:
- apk add bash
build:
stage: build
script:
- chmod 755 build
- build
Powershellを使用してローカルでスクリプトを実行するには、必要なイメージを開始し、ソースファイルでボリュームをマップします。
$containerId = docker run --privileged -d -v ${PWD}:/src docker:dind
存在しない場合はbashをインストールします。
docker exec $containerId apk add bash
Bashスクリプトにアクセス許可を設定します。
docker exec -it $containerId chmod 755 /src/build
スクリプトを実行します。
docker exec -it --workdir /src $containerId bash -c 'build'
次に、コンテナを停止します。
docker stop $containerId
最後に、コンテナをクリーンアップします。
docker container rm $containerId