GitLab CIランナーのWindowsのシェルとしてbashを使用しようとしています。
concurrent = 1
check_interval = 0
[[runners]]
name = "DESKTOP-RQTQ13S"
url = "https://example.org/ci"
token = "fooooooooooooooooooobaaaaaaaar"
executor = "Shell"
Shell = "bash"
[runners.cache]
残念ながら、CIランナーが使用する実際のシェルプログラムを指定するオプションが見つかりません。デフォルトでは、検出できないbash
を実行しようとします。 Windowsコマンドラインを開いてbash
と入力すると機能するため、理由はわかりません。
Running with gitlab-ci-multi-runner 1.9.4 (8ce22bd)
Using Shell executor...
ERROR: Build failed (system failure): Failed to start process: exec: "bash": executable file not found in %PATH%
ファイルを追加してみましたbash.cmd
を含むユーザーディレクトリ
@"C:\Program Files\Git\usr\bin\bash.exe" -l
それは私にこの奇妙なエラーを与えます:
Running with gitlab-ci-multi-runner 1.9.4 (8ce22bd)
Using Shell executor...
Running on DESKTOP-RQTQ13S...
/usr/bin/bash: line 43: /c/Users/niklas/C:/Users/niklas/builds/aeb38de4/0/niklas/ci-test.tmp/GIT_SSL_CAINFO: No such file or directory
ERROR: Build failed: exit status 1
これを適切に構成する方法はありますか?
ここで起こっている2つの問題があり、両方ともおそらく解決できます。
bash
を見つけられませんbash.cmd
ファイルを作成することで、最初の問題の解決に本質的に成功しました。しかし、それが機能しなかった理由なしに興味がある場合は、コマンドプロンプトでbash
が実行されていると思います。たとえば、あなたの場合、 "C:\ Program Files\Git\usr\bin")は、ユーザーアカウントのPATH環境変数に含まれています。しかし、おそらくgitlab-runnerをシステムアカウントで実行しているため、同じPATHを持たない可能性があります。したがって、最初に行うことは、システムのPATH変数を確認し、必要に応じてbinディレクトリを追加することです(つまり、コントロールパネルのシステムアプレットを使用して here または here )。 。変更は再起動するまで適用されないため、変更後は必ずマシンを再起動してください。システムまたは管理者アカウントで実行されているサービスから呼び出された場合でも、bash
が機能するはずです。
Bash.cmdの作成後に発生した奇妙なエラーについては、2番目の問題が原因でした。多くの場合、bashとWindowsを組み合わせると、パスを正しく設定するのが非常に困難になります。 Gitlab-runnerは、ビルドパスが相対パスか絶対パスかを判断しようとしている可能性があり、作業パス($PWD
)であるとWindowsのパスに付加することになります。これはバグのように見えますが、gitlabはまだそれを修正していません(ランナーのバージョン9.0現在のところ!!)。多分彼らはそれがバグではないか、それは彼らが修正することができないか、修正するのが難しすぎるであろう基礎となるソフトウェアまたはツールのバグが原因であると決定したでしょう。とにかく、私は回避策を発見しました。 config.toml
ファイルでビルドのベースパスを指定できます。 UNIXスタイルのパスを使用すると、問題が修正されます。 Windowsでは、config.toml
は通常、gitlab-runner.exe(またはgitlab-multi-runner-AMD64.exeなど)と同じフォルダーにあります。そのファイルをお気に入りのテキストエディタで開きます。次に、[[runners]]
セクションを見つけて、次のような2行を追加します。
builds_dir="/c/gitlab-runner/builds/"
cache_dir="/c/gitlab-runner/cache/"
使用するパスは、ビルドを保存するためにgitlab-runnerが使用するディレクトリの「bashバージョン」である必要があります。重要cygwinを使用している場合、単に/cygdrive/c/...
ではなく/c/...
に似たパスを使用します(msys-gitまたはスタンドアロンMSYS2などに適しています)。
次にconfig.tomlファイルの例を示します。
[[runners]]
name = "windows"
url = "https://your.server.name"
token = "YOUR_SECRET_TOKEN"
executor = "Shell"
Shell = "bash"
builds_dir="/c/gitlab-runner/builds/"
cache_dir="/c/gitlab-runner/cache/"
Gitlab-ciをLinuxのWindowsサブシステム(Windowsコマンドプロンプトでbash
と入力してアクセスできます)にリンクしようとしているようです。これがGitlabのランナー構成で直接サポートされているとは思えません。
代わりに、シェルエグゼキューターでPowershellを使用することをお勧めします。
Executor = 'Shell'
Shell = 'powershell'
次に、.gitlab-ci.ymlから呼び出すスクリプトでBashにドロップダウンできます。
(外部スクリプトを呼び出すのではなく).gitlab-ci.yml自体の中で非常に些細なシェルスクリプトを実行することは悪い習慣であることを考えると、ネイティブのWindowsシェルを使用することを強制されてもほとんど損失はありません。