如何使用 YAML 文件在 GitLab 管道中编写多行 Python 脚本块

问题描述 投票:0回答:1

当从 VSCode 作为简单的 Python 脚本运行时,以下脚本块非常适合我。

  d = {'A':123, 'B':456, 'C':789, 'D':222}

  for key, value in d.items():

      print(f'{key} {value}')

但是,我迫不及待地想在 GitLab 管道中复制它,并考虑了是否符合我在下面描述的内容,是否可以在我的 .gitlab-ci.yml 文件中解决问题。

到目前为止,所有的尝试都被证明是失败的。关于如何使它起作用的任何想法或建议,或者甚至是同样有效的替代方法?我的实际预期实施将用于稍微更广泛的代码块,但此处提出的任何可行解决方案都将是确保启动和运行的完美构建块。

default:
  image:
    name: python:latest
    entrypoint: [""]

  before_script:
    - python -m pip install --upgrade pip
  
stages:
  - test_1


variables:
  OUTPUTFILE: 'testoutput.txt'


test_multiline_script_block:
  stage: test_1
  image:
    name: python:latest
  script:
    - |
      d = {'A':123, 'B':456, 'C':789, 'D':222}

      for key, value in d.items():
      
          print(f'{key} {value}')
python gitlab-ci codeblocks gitlab-ci.yml
1个回答
0
投票

您的 .gitlab-ci.yml 文件看起来不错,test_multiline_script_block 作业应该正确执行 Python 代码块。

但是,打印语句的输出在 GitLab 管道日志中是不可见的。相反,您需要将输出重定向到稍后可以检查的文件。在您的情况下,您已经定义了一个可用于此目的的变量 OUTPUTFILE。

这是将输出重定向到 OUTPUTFILE 的 test_multiline_script_block 作业的更新版本:

test_multiline_script_block:
  stage: test_1
  image:
    name: python:latest
  script:
    - |
      d = {'A':123, 'B':456, 'C':789, 'D':222}
      with open('$OUTPUTFILE', 'w') as f:
        for key, value in d.items():
          f.write(f'{key} {value}\n')

此代码块将创建一个新文件,其名称在 OUTPUTFILE 变量中指定,并将每一行输出写入该文件。然后您可以下载该文件并检查它以查看 Python 脚本的输出。

注意,该文件将创建在作业的当前工作目录中,这很可能与您本地开发环境的工作目录不同。为了确保您可以找到输出文件,您可能需要包括一个步骤来打印出当前工作目录:

test_multiline_script_block:
  stage: test_1
  image:
    name: python:latest
  script:
    - |
      pwd
      d = {'A':123, 'B':456, 'C':789, 'D':222}
      with open('$OUTPUTFILE', 'w') as f:
        for key, value in d.items():
          f.write(f'{key} {value}\n')

这会将作业的当前工作目录打印到管道日志中,因此您可以找到输出文件。

© www.soinside.com 2019 - 2024. All rights reserved.