How to include a script.py on my gitlab-ci.yml?

Viewed 3069

I am implementing a gitlab-ci.yml for my project . in this yml file I will need to execute a script.py file . this script.py is located on a differnet project , Is there anyway to include this python script without uploading it to my project .

Something like : " include :' https://gitlab.com/khalilazennoud3//-/blob/main/script.py '

1 Answers

There's no way to 'include' a file that isn't a Pipeline definition template, but you can still grab that file. The way I'd do it is to add a second Pipeline job in a prior stage to clone that other repository, then upload the file you need as an artifact. Then in the job where you need the file, it will have the artifact available.

Here's an example pipeline with just these two Jobs:

stages:
  - "Setup other Project Files" # or whatever
  - Build

Grab Python Script from Other Repo:
  stage: "Setup other Project Files"
  image: gitscm/git
  variables:
    GIT_STRATEGY: none
  script:
    - git clone git@gitlab.example.com:user/project.git
  artifacts:
    paths:
      - path/to/script.py.
    when: on_success # since if the clone fails, there's nothing to upload
    expire_in: 1 week # or whatever makes sense

Build Job:
  stage: Build
  image: python
  dependencies: ['Grab Python Script from Other Repo']
  script:
    - ls -la # this will show `script.py` from the first step along with the contents of "this" project where the pipeline is running
    - ./do_something_with_the_file.sh

Let's go through these line by line. For the first job:

  1. We're using the Git image since all we need here is git
  2. The GIT_STRATEGY: none variable tells the Gitlab Runner not to clone/fetch the project the pipeline is running for. This is super useful if the job is doing things like sending notifications to Slack, hitting another API, etc.
  3. For the script, all we do is clone the other project so that we can upload the file as an artifact.

For the second job:

  1. Use whatever image you're using for this job as normal
  2. The dependencies keyword controls which artifacts from previous stages will be 1) required and 2) downloaded for this specific job. By default, all available artifacts are downloaded for all jobs. This keyword controls that since we only need the script.py file.
  3. In the script we just make sure that the file is present, which is just a temporary thing anyway, then you can use it however you need to.
Related