【问题标题】:Search file in gitlab-ci.yml job在 gitlab-ci.yml 作业中搜索文件
【发布时间】:2021-08-15 16:58:50
【问题描述】:

我在 gitlab-ci.yml 有一份工作,看起来像这样

job_name:
  script:
    - .../ExeName.exe > Output.txt      
  needs:
    - ...
  stage: ...
  tags:
     - ...

编辑:作业正在使用 powershell

ExeName.exe 是由 Visual Studio 创建的可执行文件。 Output.txt 包含程序的输出,并在运行 ExeName.exe 时创建。我想知道Output.txt 文件中是否存在字符串。如果字符串存在,作业应该失败,如果存在,作业应该通过。我该怎么做?

【问题讨论】:

    标签: powershell shell gitlab-ci


    【解决方案1】:

    我猜你考虑的工作是运行一个包含标准 POSIX 工具的图像。

    所以特别是,您可能希望依赖grep

    两种写法:

    job_name:
      script:
        - .../ExeName.exe > Output.txt
        - '! grep -e "forbidden string" Output.txt'
    

    (默认情况下,grep 如果找到字符串则成功,而您对相反的行为感兴趣,因此使用 shell 否定运算符 !)或:

    job_name:
      script:
        - .../ExeName.exe > Output.txt
        - grep -q -v -e "forbidden string" Output.txt
    

    如果您想在日志中显示更多文本,您可能需要手动使用if

    job_name:
      script:
        - .../ExeName.exe > Output.txt
        - if grep -q -e "forbidden string" Output.txt; then echo "Found forbidden string"; false; else echo "OK."; fi
    

    顺便说一句,您可能有兴趣将生成的文本文件 Output.txt 设置为 job artifact

    【讨论】:

    • 我的工作正在使用 powershell(我不提它很糟糕)。我尝试了类似的方法: (Get-Content output.txt| select-string -pattern "forbidden string").length -ne 0 。它只是返回 false 并且作业成功。编辑:我想在这项工作中进行 Output.txt 测试,所以我不需要工件。谢谢你的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2021-07-07
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多