web-dev-qa-db-fra.com

La syntaxe GitLab CI pour écrire l'instruction de boucle FOR?

Voici le script mentionné dans le fichier gitlab-ci.yml. Cette configuration GitLab CI est valide. Mais, lorsque la génération CI/CD est exécutée, le travail échoue. Est-ce lié à la syntaxe de la boucle FOR?

deploy_dv:
  stage: deploy_dv
  variables:
    GIT_STRATEGY: none
script:
  - echo "Deploying Artifacts..."
  - echo "Configure JFrog CLI with parameters of your Artifactory instance"
  - 'c:\build-tools\JFROG-CLI\jfrog rt config --url  %ARTIFACTORY_WEBSITE% --user %ARTIFACTORY_USER% --apikey %APIKEY%'
  - 'cd ..\artifacts'
  - 'SETLOCAL ENABLEDELAYEDEXPANSION'
  - FOR %%i in (*) do (
        'c:\build-tools\curl\bin\curl.exe --header "PRIVATE-TOKEN:%HCA_ACCESS_TOKEN%" --insecure https://code.example.com/api/repository/tags/%CI_COMMIT_TAG% | c:\build-tools\jq\jq-win64.exe ".release.description" > temp.txt'
         'set /p releasenote=<temp.txt'
         'rem del temp.txt'
         'set mydate=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%'
         'c:\build-tools\JFROG-CLI\jfrog rt u "%%i" %ARTIFACTORY_ROOT_PATH%/%PROJECT_NAME%/%%i --build-name=%%i --build-number=%BUILDVERSION%  --props releasenote=%releasenote%;releaseversion=%BUILDVERSION%;releasedate=%mydate% --flat=false'
     )

    - '%CURL% -X POST -F token=%REPOSITORY_TOKEN% -F ref=master  -F "variables[RELEASE]=false" -F "variables[PROGRAM]=test" --insecure https://code.example.com/api/repository/trigger'

  only:
  - /^(dv-)(\d+\.)(\d+\.)(\d+)$/

Je reçois cette erreur ci-dessous:

  $ echo "Deploying Artifacts..."
"Deploying Artifacts..."
$ echo "Configure JFrog CLI with parameters of your Artifactory instance"
"Configure JFrog CLI with parameters of your Artifactory instance"
$ c:\build-tools\JFROG-CLI\jfrog rt config --url  %ARTIFACTORY_WEBSITE% --user %ARTIFACTORY_USER% --apikey %APIKEY%
Artifactory server ID [Default-Server]: $ cd ..\artifacts
$ SETLOCAL ENABLEDELAYEDEXPANSION
$ FOR %%i in (*) do ( 'c:\build-tools\curl\bin\curl.exe --header "PRIVATE-TOKEN:%HCA_ACCESS_TOKEN%" --insecure  https://code.example.com/api/repository/tags/%CI_COMMIT_TAG% | c:\build-tools\jq\jq-win64.exe ".release.description" > temp.txt' 'set /p releasenote=<temp.txt' 'rem del temp.txt' 'set mydate=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%' 'c:\build-tools\JFROG-CLI\jfrog rt u "%%i" %ARTIFACTORY_ROOT_PATH%/%PROJECT_NAME%/%%i --build-name=%%i --build-number=%BUILDVERSION%  --props releasenote=%releasenote%;releaseversion=%BUILDVERSION%;releasedate=%mydate% --flat=false' )
The filename, directory name, or volume label syntax is incorrect.
ERROR: Job failed: exit status 255
7
user2301

Puisqu'il n'y a toujours pas de bonne réponse à cette question, je vais essayer.
Les coupures ci-dessous ont fonctionné pour moi, notez le '>'.

build:
  stage: build
  script:
    - >
      for dir in $(ls -d */ | sed 's#/##'); do
        cd $dir
        docker build -t my.repo/docker:$dir .
        docker Push my.repo/docker:$dir
        cd ..
      done
2
Nebulastic

Voici un exemple de travail d'un travail dans un .gitlab-ci avec une boucle fonctionnant sous GNU/Linux OS et utilisant Sh/Bash Shell:

edit:
  stage: edit
  script:
     - for file in  $(find ${CI_PROJECT_DIR} -type f -name deployment.yml)
       do 
         CURRENT_IMAGE=$(grep "image:" $file | cut -d':' -f2- | tr -d '[:space:]' | cut -d':' -f3)
         sed -ie "s/$CURRENT_IMAGE/$VERSION/g" "$file"
       done
  only:
     - master

Je ne suis pas un expert de Gitlab-Runner sur Windows mais Windows Batch est le Shell par défaut utilisé mais vous pouvez également utiliser Powershell .

0
Nicolas Pepinster

Dans .gitlab.yml, tout ce que vous écrivez sous "script" est Shell. Ainsi, la boucle sera la même que celle qui fonctionne dans le script Shell.

for var in ${NAME_1} ${NAME_2} ${NAME_3} ; do
 *----computations----*
done
0
Mradula Ghatiya