gitlab yaml管道内的while循环

Posted

技术标签:

【中文标题】gitlab yaml管道内的while循环【英文标题】:while loop inside gitlab yaml pipeline 【发布时间】:2021-07-01 06:13:00 【问题描述】:

我的 .yml 文件的脚本部分应该有一个多行命令(while ... do script)。它基本上应该将文件从当前提交复制到 docker 映像中的特定位置。

由于某种原因,管道抛出错误。见下文。

下面是我的 .gitlab-ci.yml 文件的内容

.gitlab-ci.yml

stages:
  - transform
    
Transform:
  stage: transform
  image:
    name: some-ubuntu-image
    entrypoint: [""]
  except:
    - master
  script:
    - mkdir /opt/input-files
    
    - |
      i=0
      while read line
      do
        array[ $i ]="$line"
        cp -p --parents "$line" /opt/input-files/
        ((i++))
      done < <(git diff-tree --no-commit-id --name-only -r $CI_COMMIT_SHORT_SHA);

    - echo "Displaying copied files"
    - ls -a /opt/input-files/

作业错误:

$ mkdir /opt/input-files
$ i=0
$ while read line; do # collapsed multi-line command
Cleaning up file based variables
00:01
ERROR: Job failed: exit code 1

【问题讨论】:

【参考方案1】:

想象它是一条线。

然后添加换行符。

你可以写:

 i=0; while read line; do array[i]="$line"; cp -p --parents "$line" /opt/input-files/;  ((i++)); done < <(git diff-tree --no-commit-id --name-only -r $CI_COMMIT_SHORT_SHA);

或使用换行符:

 i=0;
 while read line; do
    array[i]="$line";
    cp -p --parents "$line" /opt/input-files/;
    ((i++));
done < <(git diff-tree --no-commit-id --name-only -r $CI_COMMIT_SHORT_SHA);

就在 gitlab 内部:

script:
- i=0;
  while read line; do
    array[i]="$line";
    cp -p --parents "$line" /opt/input-files/;
    ((i++));
  done < <(git diff-tree --no-commit-id --name-only -r $CI_COMMIT_SHORT_SHA);

【讨论】:

以上是关于gitlab yaml管道内的while循环的主要内容,如果未能解决你的问题,请参考以下文章

GitLab 仅手动而不是自动运行管道

Gitlab Yaml 不能正常工作 工作需要

GitLab CI/CD 运行程序无法执行

使用gitlab实现CI

openmp - 用于文本文件读取和使用管道的 while 循环

管道下while循环中定义的变量在退出while循环时引用为空的问题