Windows GitLab CI Runner bruger Bash

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at bruge bash som shell på Windows til en GitLab CI Runner.


concurrent = 1
check\_interval = 0

[**runners**]
  name = "DESKTOP-RQTQ13S"
  url = "https://example.org/ci"
  token = "fooooooooooooooooooobaaaaaaaar"
  executor = "shell"
  shell = "bash"
  [runners.cache]


Desværre kan jeg ikke finde en mulighed for at angive det faktiske shell-program, som CI Runner skal bruge. Som standard forsøger den bare at køre bash, som den ikke kan finde. Jeg ved ikke hvorfor, for når jeg åbner en Windows-kommandolinje og indtaster bash virker det.


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\%


Jeg forsøgte at tilføje en fil bash.cmd til min brugerbog indeholdende


@"C:Program FilesGitusrinash.exe" -l


Det giver mig denne underlige fejl:


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


Er der en måde at konfigurere dette korrekt på?

Bedste reference


Der er to problemer i gang her, og begge kan nok blive løst.



  1. gitlab-runner kan ikke finde bash

  2. gitlab-runner kombinerer ikke pathways i Unix-stil og Windows-stil.



Du har i det væsentlige lykkedes at løse den første ved at oprette filen bash.cmd. Men hvis du er nysgerrig om hvorfor det ikke fungerede uden , er det min gætte, at bash kører i din kommandoprompt, fordi den mappe der indeholder den (f.eks. I dit tilfælde 'C' : \ Programmer \ Git \ usr \ bin ') er inkluderet i PATH-miljøvariablen for din brugerkonto . Men måske kører du gitlab-løberen i systemkontoen , som måske ikke har samme PATH.
Så det første, du skal gøre, er bare at kontrollere systemets PATH-variabel og tilføj bin biblioteket, hvis det er nødvendigt (dvs. ved at bruge Systemapplet i Kontrolpanel som beskrevet her eller her). Sørg bare for at genstarte din maskine, efter du har lavet ændre, fordi ændringen ikke anvendes før efter genstart. Det skal gøre bash arbejde, selv når det kaldes fra en tjeneste, der kører i systemet eller adminkontoen. [22] [23]


Hvad angår den mærkelige fejl, du fik efter at have skabt bash.cmd, skyldtes det andet nummer. Stier er ofte virkelig svært at få ret, når man kombinerer bash og Windows. Gitlab-løber forsøger sandsynligvis at bestemme, hvorvidt byggepaden er relativ eller absolut, og ender med at udbedre Windows-stien med, hvad den mener, er arbejdskatalogen ($PWD). Dette ligner en fejl, men gitlab har stadig ikke rettet det (som af version 9.0 af løberen !!) og sandsynligvis aldrig vil. Måske har de besluttet, at det ikke er en fejl eller at det skyldes fejl i underliggende software eller værktøjer, som de ikke kan reparere, eller at det ville være for svært at rette. I hvert fald har jeg opdaget et arbejde. Du kan angive basisbanen for bygninger i filen config.toml. Hvis du bruger en unix-stil-sti, løser det problemet.
På vinduer er config.toml normalt i samme mappe som din gitlab-runner.exe (eller gitlab-multi-runner-amd64.exe osv.). Åbn den pågældende fil i din yndlings teksteditor. Find derefter sektionen [**runners**] og tilføj to linjer svarende til følgende.


builds\_dir="/c/gitlab-runner/builds/"
builds\_cache="/c/gitlab-runner/cache/"


Stien du bruger, skal være den 'bash version', uanset hvilken mappe du vil have gitlab-runner til at bruge til opbevaring af bygg osv. Vigtigt Hvis du bruger cygwin, ville du bruge en sti svarende til /cygdrive/c/... i stedet for blot /c/... (som er passende for msys-git eller standalone MSYS2 osv.).


Her er et eksempel på en config.toml-fil:


[**runners**]
  name = "windows"
  url = "https://your.server.name"
  token = "YOUR\_SECRET\_TOKEN"
  executor = "shell"
  shell = "bash"
  builds\_dir="/c/gitlab-runner/builds/"
  builds\_cache="/c/gitlab-runner/cache/"

Andre referencer 1


Det ser ud til at du forsøger at forbinde gitlab-ci med Windows Subsystem for Linux (som kan nås ved at skrive bash ved kommandoprompten i Windows? Jeg tvivler på, at dette understøttes direkte af Gitlabs runner konfiguration.


I stedet vil jeg foreslå at bruge Powershell med din shell eksekutor.


            Executor = 'shell'
            Shell = 'powershell'


Du kan derefter falde ned i Bash i de scripts du ringer fra .gitlab-ci.yml.


Da det er dårlig praksis at udføre mere end meget trivielle shell-scripts i selve .gitlab-ci.yml (i modsætning til at kalde på et eksternt script), taber du lidt ved at blive tvunget til at bruge en native Windows-shell.