開発者環境

1. 依存関係とGoランタイムのインストール

Debian/Ubuntu の場合

sudo apt-get install -y mercurial git-core wget make build-essential
wget https://storage.googleapis.com/golang/go1.13.8.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go*-*.tar.gz

MacOS用

バイナリパッケージを使用:

wget https://storage.googleapis.com/golang/go1.13.8.darwin-amd64.tar.gz
sudo tar -C /usr/local -xzf go*-*.tar.gz

インストールパッケージを使用:

wget https://storage.googleapis.com/golang/go1.13.8.darwin-amd64.pkg
open go*-*.pkg

FreeBSD の場合

pkg install go-1.13.8 gmake git mercurial

2. Dockerエンジンのインストール

Docker Engineは、runnerに組み込まれ、Docker executorを使用する際にロードされるビルド済みイメージを作成するために必要です。

Dockerをインストールするには、お使いのOSのDockerインストール手順に従ってください。

Docker Engineを実行しているマシンにbinfmt_misc 。これはGitLab Runnerのバイナリに組み込まれるARMイメージをビルドするために必要です。

  • Debian/Ubuntuでは実行するだけで十分です:

     sudo apt-get install binfmt-support qemu-user-static
    
  • Docker for MacOS/Windowsbinfmt_misc はデフォルトで有効になっています。

  • CoreOSの場合(DebianやUbuntuでも動作します)、システム起動時に以下のスクリプトを実行する必要があります:

     #!/bin/sh
    
     set -xe
    
     /sbin/modprobe binfmt_misc
    
     mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc
    
     # Support for ARM binaries through Qemu:
     { echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm-static:' > /proc/sys/fs/binfmt_misc/register; } 2>/dev/null
     { echo ':armeb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-armeb-static:' > /proc/sys/fs/binfmt_misc/register; } 2>/dev/null
     { echo ':aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:CF' > /proc/sys/fs/binfmt_misc/register; } 2>/dev/null
    

3. ランナーソースのダウンロード

go get gitlab.com/gitlab-org/gitlab-runner

4. ランナーのインストール

これにより、runnerのビルドに必要なすべての依存関係がダウンロードされ、リストアされます:

make deps

FreeBSD の場合は次のようにします。gmake deps

5. ランナー

通常は、gitlab-runnerを使用します。 Goソースをコンパイルして実行するには、Goツールチェーンを使用します:

make runner-and-helper-bin-host
./out/binaries/gitlab-runner run

runnerはデバッグモードで実行できます:

make runner-and-helper-bin-host
./out/binaries/gitlab-runner --debug run

make runner-and-helper-bin-hostmake runner-bin-host のスーパーセットで、Runner Helper Docker アーカイブの依存関係の構築も行います。

Dockerイメージのビルド

Dockerイメージをビルドしたい場合は、make runner-and-helper-docker-hostを実行してください:

  1. gitlab-runner-helper をビルドし、そこからヘルパー Docker イメージを作成します。
  2. linux/amd64用コンパイルランナー .
  3. Runner用のDEBパッケージをビルドします。 公式RunnerイメージはAlpineとUbuntuをベースにしており、UbuntuイメージのビルドはDEBパッケージを使用します。
  4. Alpine版とUbuntu版のgitlab/gitlab-runner イメージをビルドします。

6. ローカルでテストスイートを実行

GitLab Runner のテストスイートは、”Core” テストと executor 用のテストで構成されています。 executor 用のテストでは、特定のバイナリがローカルマシンにインストールされている必要があります。 これらのバイナリの中には、すべてのオペレーティングシステムにインストールできないものもあります。 バイナリがインストールされていない場合、そのバイナリを必要とするテストはスキップされます。

これらはインストールできるバイナリです:

  1. VirtualBoxと Vagrant
  2. kubectlとMinikube
  3. Parallels
  4. パワーシェル

インストール後、バイナリを実行してください:

make development_setup

テストを実行するには

make test

8. オプションツールのインストール

  • make lint ターゲットに使用されるgolangci-lintをインストールします。
  • make lint-docs ターゲットに使用するmarkdown-lintvaleをインストールします。

ツールが見つからない場合、Makefile ターゲットを実行する際にインストール手順がポップアップ表示されます。

9. 貢献する

GitLab-Runnerのコードをハックし始めることができます。 コードの編集やデバッグにIDEが必要な場合は、無料で使えるものがいくつかあります:

ビルド依存関係の管理

GitLab Runner は依存関係を管理するためにGo モジュールを使います。これらはvendor/ ディレクトリの下のリポジトリにチェックインされます。

バージョンタグが利用可能な場合は、上流のマスターブランチからの依存関係を追加しないでください。

非 Windows 環境での Windows 用開発者

Vagrantの中で複数のマシンを使用するため、Windows Server 2019やWindows 10のインスタンスを実行するためのVagrantfileを提供します。

以下のものが必要です:

  • Vagrantをインストールしました。
  • Virtualboxインストール。
  • コンピュータのハードディスクに30GB程度の空き容量があること。

どの仮想マシンを使用するかは、ユースケースによって異なります:

  • Windows ServerマシンにはDockerがプリインストールされており、Runner for Windowsで開発する場合は常に使用する必要があります。
  • Windows10マシンは、Windowsの機能をデバッグするのに役立つGUIを備えたWindows環境を提供するためにあります。 ネスト化された仮想化はサポートされていないため、Windows10内でDockerを実行することはできません。

vagrant up windows_10 を実行すると、Windows 10 マシンが起動します:

  • Windows 10マシンの内部でSSHし、vagrant ssh windows_10を実行します。
  • Windows 10 の GUI にアクセスするには、vagrant rdp windows_10を実行して RDP 経由で接続します。この場合、ローカルにインストールされた RDP プログラムを使用してマシンに接続します。

どちらのマシンでも、GitLab Runner のソースコードは双方向で同期されるので、自分のマシンからお気に入りのエディタで編集することができます。 ソースコードは$GOROOT環境変数の下にあります。RUNNER_SRC 環境変数でフルパスを調べることができるので、PowerShell を使うときはcd $Env:RUNNER_SRC.

トラブルシューティング

docker.go missing Asset symbol

このエラーは、Docker prebuiltから生成されるexecutors/docker/bindata.go ファイルが見つからないために発生します。特にWindowsでは厄介です。

make deps dockerを実行してみてください。それでもだめなら、段階的に実行することもできます:

  1. 実行go get -u github.com/jteeuwen/go-bindata/...
  2. https://gitlab-runner-downloads.s3.amazonaws.com/master/docker/prebuilt-x86_64.tar.xz をダウンロードして保存してください。out/docker/prebuilt-x86_64.tar.xz
  3. https://gitlab-runner-downloads.s3.amazonaws.com/master/docker/prebuilt-arm.tar.xz をダウンロードして保存してください。out/docker/prebuilt-arm.tar.xz
  4. make docker を実行するか、Makefile をチェックしてください。