Artefaktları başka bir aşamaya nasıl geçirebilirim?


107

Farklı aşamaları ayrı komut dosyalarıyla çalıştırmak için .gitlab-ci.yml dosyasıyla GitLab CI kullanmak istiyorum. İlk aşama, testleri gerçekleştirmek için daha sonraki bir aşamada kullanılması gereken bir araç üretir. Oluşturulan aracı eser olarak ilan ettim.

Şimdi bu aracı daha sonraki bir aşamada nasıl çalıştırabilirim? Doğru yol nedir ve etrafında hangi dosyalar olacak?

Örneğin, ilk aşama eserler / bin / TestTool / TestTool.exe oluşturur ve bu dizin diğer gerekli dosyaları (DLL'ler ve diğerleri) içerir. .Gitlab-ci.yml dosyam şöyle görünüyor:

releasebuild:
  script:
    - chcp 65001
    - build.cmd
  stage: build
  artifacts:
    paths:
      - artifacts/bin/TestTool/

systemtests:
  script:
    - chcp 65001
    - WHAT TO WRITE HERE?
  stage: test

Derleme ve testler, uygunsa Windows'ta çalışır.

Yanıtlar:


102

Kullanın dependencies. Bu yapılandırma testi aşamasıyla, derleme aşamasında oluşturulan izlenmeyen dosyaları indirir:

build:
  stage: build
  artifacts:
    untracked: true
  script:
    - ./Build.ps1

test:
  stage: test
  dependencies: 
    - build
  script:
    - ./Test.ps1

9
Sonunda işi alabildim! Buradaki kilit nokta, bağımlılıkların yapay nesnelerle birlikte kullanılması gerektiğidir. Yalnızca dahil edilen eserler sonraki aşamada tüketime açık olacaktır. Söylemeye gerek yok, yüklenenler konusunda ihtiyatlı olun. Expire_in kullanın derdim. Aksi takdirde çok fazla depolama alanı israf edebiliriz. Bu eserler, derleme işi / aşaması / adımında gitlab'a yüklenir ve testte indirilir.
ravikanth

18
Bağımlılıkları gerçekten kullanmak zorunda mısınız? Gitlab dokümantasyon durumları Note that artifacts from all previous stages are passed by default.. Soru, bağımlılıkları ne zaman kullanmanız gerektiğidir.

2
Dokümantasyon bunu oldukça iyi açıklıyor
chetbox

3
@Josef'in önceki tüm aşamalardan eserleri varsayılan olarak aktarılır (Önceki işlerden değil)
Vivek

1
@Josef, mevcut iş için önceki tüm aşamalardan tüm eserlere ihtiyacınız olmadığında. Diyelim ki, derleme aşamasında oluşturulmuş 10 GB ikili dosyalarınız vardı, ancak son
aşamanız

50

Önceki tüm aşamalardan gelen eserler varsayılan olarak geçtiği için, sadece aşamaları doğru sırada tanımlamamız gerekiyor. Lütfen anlamanıza yardımcı olabilecek aşağıdaki örneği deneyin.

image: ubuntu:18.04

stages:
  - build_stage
  - test_stage
  - deploy_stage

build:
  stage: build_stage
  script:
    - echo "building..." >> ./build_result.txt
  artifacts:
    paths:
    - build_result.txt
    expire_in: 1 week

unit_test:
  stage: test_stage
  script:
    - ls
    - cat build_result.txt
    - cp build_result.txt unittest_result.txt
    - echo "unit testing..." >> ./unittest_result.txt
  artifacts:
    paths:
    - unittest_result.txt
    expire_in: 1 week

integration_test:
  stage: test_stage
  script:
    - ls
    - cat build_result.txt
    - cp build_result.txt integration_test_result.txt
    - echo "integration testing..." >> ./integration_test_result.txt
  artifacts:
    paths:
    - integration_test_result.txt
    expire_in: 1 week

deploy:
  stage: deploy_stage
  script:
    - ls
    - cat build_result.txt
    - cat unittest_result.txt
    - cat integration_test_result.txt

görüntü açıklamasını buraya girin

Ve farklı aşamalardaki işler arasında artefaktların geçmesi durumunda, dokümanda anlatıldığı gibi, artefaktları geçmek için bağımlılıkları birlikte kullanabiliriz .

Ve bir daha basit örnek:

image: ubuntu:18.04

build:
  stage: build
  script:
    - echo "building..." >> ./result.txt
  artifacts:
    paths:
    - result.txt
    expire_in: 1 week

unit_test:
  stage: test
  script:
    - ls
    - cat result.txt
    - echo "unit testing..." >> ./result.txt
  artifacts:
    paths:
    - result.txt
    expire_in: 1 week

deploy:
  stage: deploy
  script:
    - ls
    - cat result.txt

Çok net açıklama, teşekkür ederim. Bir sahne, bir yapıtı önceki aşamadaki bir yapı ile aynı adla adlandırırsa, orijinal yapının üzerine yazılır mı?
Michael Osofsky

1
@MichaelOsofsky Esere aynı isimle isim verebilirsiniz, orijinal eser bir sonraki aşamadaki aynı isimli eser tarafından üzerine yazılmaz. Bir sonraki aşama yalnızca eski aşamadaki yapıyı indirir, onun bir kopyasıdır. Bunları örnekte farklı şekilde adlandırıyorum çünkü birim testi ve entegrasyon paralel olarak yürütülecektir. .Eg entegrasyon test işini kaldırırsak, tüm işler sırayla yürütülür, o zaman tüm eserler için aynı adı herhangi bir karışıklık olmadan kullanabiliriz. Bilginize, cevabı bir örnekle daha güncelliyorum.
Chuan

Örneğinizde result.txt'ye eklediğinizi görüyorum. İş birimi testinde result.txt dosyasının üzerine yazarsanız, iş dağıtımının iş derlemesinden result.txt içeriğine asla erişemeyeceğini varsayıyorum. Komut dosyalarımda asla bu tür bir hataya neden olmadığımdan emin olmak istiyorum.
Michael Osofsky

1
Günlüğe göre, konuşlandırma aşaması hem derleme hem de test aşamalarından sonuç.txt dosyasını indirecek, ancak sonraki aşama öncekinin üzerine yazacaktır.
Chuan

1
BTW, orijinal yapıya dokunulmaz ve her zaman CI / CD -> Pipelines'dan indirilebilir, ardından sağdaki Artifactlar için açılır düğmeyi tıklayın, tüm aşamaların tüm eserlerini bulacaksınız.
Chuan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.