我有一个python脚本,我想使用Argo工作流在云上执行。
目前,我交替地将源代码复制到工作流本身(使用复制和粘贴),这是不方便的,并导致问题。第二个选项是将我的项目目录上传到s3存储桶,然后将源代码下载到Argo pod,然后运行命令。这两种方法都需要在我修改脚本后同步源代码的一些操作。
是否有一种方法来指定在Argo工作流从哪里应该采取的源代码?比如说,不是创建一个从.yml
文件中指定的字符串中获取源的脚本模板,而是通过指定本地路径从本地文件中获取源?
- 最好不要使用Git
- 另外,如果可能的话,希望解决方案支持附加额外的依赖源代码文件
如果您有比.yml
文件中使用的简单脚本更复杂的东西,那么为您的工作流预构建的容器模板使用docker映像可能是值得的。映像将命名为my-script
,入口点将命名为my-entrypoint
假设脚本是python语言,名为script.py
,您可以拥有以下文件:
workflow.yml
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: workflow-name-
spec:
entrypoint: my-entrypoint
templates:
- name: my-entrypoint
container:
image: my-script
command: python3
args:
- script.py
script.py
import requests
response = requests.get('www.google.com')
print(response.status_code)
requirements.txt
requests
Dockerfile
FROM python:3.11.1-slim
COPY . .
RUN pip3 install -r requirements.txt
CMD python3 script.py
假设您可以将映像构建到集群(在minikube的情况下)。你运行:
docker build -t my-script .
如果您决定进行测试,这种方法还可以使您的代码可测试。为此,没有必要使用Git,尽管我鼓励您使用它进行协作和版本控制。另外,Dockerfile
中的COPY
命令将目录中的所有文件复制到映像中,这样您就可以随时获得其他信息。我不建议您以这种方式复制实际数据,而是使用argoparameters
和artifacts
。
查看https://argoproj.github.io/argo-workflows/workflow-concepts/获取更多信息