首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GitLab CI语法写FOR loop语句?

GitLab CI语法写FOR loop语句?
EN

Stack Overflow用户
提问于 2018-09-18 21:50:45
回答 3查看 31.2K关注 0票数 15

下面是gitlab-ci.yml文件中提到的脚本。此GitLab CI配置有效。但是,当运行CI/CD构建时,作业将失败。这与FOR循环语法有关吗?

代码语言:javascript
复制
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+)$/

我得到下面的错误:

代码语言:javascript
复制
  $ 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
EN

回答 3

Stack Overflow用户

发布于 2019-03-30 18:37:54

既然这个问题还没有很好的答案,我就试一试。我使用这个代码片段为我的存储库中的每个目录启动了多个Docker构建。注意>,它允许您将多行命令放入YAML (source)中。

Linux示例:

代码语言:javascript
复制
build:
  stage: loop
  script:
    - >
      for i in $(seq 1 3); do
        echo "Hello $i"
      done

Windows示例:

代码语言:javascript
复制
build:
  stage: loop
  script:
    - >
      setlocal enabledelayedexpansion
      for %%a in ("C:\Test\*.txt") do (
        set FileName=%%~a
        echo Filename is: !FileName!
      )
      endlocal
票数 21
EN

Stack Overflow用户

发布于 2019-02-08 23:46:09

以下是.gitlab-ci中的作业的工作示例,该作业在GNU/Linux操作系统上运行,并使用Sh/Bash shell:

代码语言:javascript
复制
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

我不是Windows上的Gitlab-Runner专家,但Windows Batch是使用的默认shell,但您也可以使用Powershell

票数 2
EN

Stack Overflow用户

发布于 2019-08-16 23:01:11

在.gitlab.yml中,你在“脚本”下写的任何东西都是外壳。因此,for循环将与它在shell脚本中的工作方式相同。

代码语言:javascript
复制
for var in ${NAME_1} ${NAME_2} ${NAME_3} ; do
 *----computations----*
done
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52388153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档