Sevgili yazılımperver takipçilerim, yeni ve inşallah kısa bir yazı ile tekrar birlikteyiz. En son Conan 2.0’a yönelik yazımı sizler ile paylaşmıştım, inşallah Conan’a yönelik yazılarıma devam edeceğiz, bunun ile birlikte öncelikle CI/CD ile ilgili bir yazıyı sizlerle paylaşıyor olacağım.
Daha önce sizlerle birlikte github üzerinde cpp-playground reposu için github actions ile pipeline’larımız oluşturmuştuk ve her commit ile bu pipeline’ların tetiklendiğini sizler ile paylaşmıştım.
Peki kardeşim, ben bu pipeline’ı web üzerinden de, bir yerlere tıklayarak tetikleyemez miyim? Bu yazıda bunu nasıl yapabileceğimize bakacağız. Nereden çıktı bu diyebilirsiniz, lakin benim gibi Azure TFS kullandıysanız, orada pipeline’ları herhangi bir şey yapmadan web üzerinden de tıklayarak da çalıştırabiliyordunuz. Niye buna ihtiyaç da var diyebilirsiniz, aslına bakarsanız yok. Pipeline’ları commit’ler ile tetikliyorsanız yine sıkıntı olmaması lazım, gel gör ki merak ettim ve bu yapılabiliyor mu diye merak ettim. Evet nedir bunun yöntemi peki?
Yapmanız gereken temelde trigger (on:) satırlarına “workflow_dispatch:” ‘i ekliyoruz:
|
1 2 3 4 5 6 7 |
on: push: branches: - main paths-ignore: - "**/**.md" workflow_dispatch: |
Bunu ekledikten sonra https://github.com/yazilimperver/cpp-playground/actions/workflows/cpp-playground.yml sayfasına gidip, sol sekmeden “SDL3 Cpp Playground Github Actions”‘ı seçtikten sonra, aşağıdaki bildirimi göreceksiniz:
“This workflow has a workflow_dispatch event trigger.”
Ve aşağıdaki gibi bir menü gelmiş olacak:

Evet, yukarıda gördüğünüz üzere artık el ile, web üzerinden de bu pipeline’ı artık tetikleyebileceğiz. Şimdi gelelim ikinci hususa: gitlab.
- Workflow vs Pipeline: GitHub’daki steps, GitLab’da genellikle script bloğu altına yazılır,
- Jobs: GitLab’da her iş (job) varsayılan olarak temiz bir ortamda başlar. Dosyaları bir sonraki aşamaya aktarmak için artifacts kullanmak gerekir,
- Runners: GitHub’ın windows-latest ve ubuntu-latest imajları yerine, GitLab’da Docker imajlarını veya Windows için özel “tag”lenmiş runnerları kullanılır.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
workflow: rules: - if: $CI_PIPELINE_SOURCE == "web" - if: $CI_PIPELINE_SOURCE == "push" - if: $CI_PIPELINE_SOURCE == "merge_request_event" stages: - build - test - report # --- Windows Job --- build-windows: stage: build tags: - saas-windows-medium-amd64 variables: CC: "cl" CXX: "cl" before_script: - Set-Variable -Name "time" -Value (date -Format "%H:%m") - echo ${time} - echo "started by ${GITLAB_USER_NAME} / @${GITLAB_USER_LOGIN}" script: - echo "Cpp Playground started from Windows!" # MSVC ortamını hazırlar (vcvarsall.bat benzeri) şimdilik bunu henüz ayaga kaldirmadim # - '& "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"' # - .\scripts\install_dependencies.bat # # Build # - cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -G "Ninja" -DCMAKE_PREFIX_PATH="%CD%\sdl3-install" # - cmake --build build artifacts: paths: - build/ # --- Linux Job --- build-linux: stage: build image: ubuntu:24.04 when: manual before_script: - apt-get update -y - apt-get install -y cmake ninja-build gcc g++ clang-tidy lcov gcovr curl unzip git wget script: - echo "Cpp Playground started from Linux!" - chmod +x scripts/install_dependencies.sh - ./scripts/install_dependencies.sh - cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -G "Ninja" - cmake --build build artifacts: paths: - build/ - scripts/ expire_in: 1 hour # --- Test Job (Linux üzerinden devam) --- test-linux: stage: test image: ubuntu:24.04 when: manual dependencies: - build-linux before_script: - apt-get update -y && apt-get install -y cmake ninja-build gcovr gcc script: - cd build/test - ctest --output-on-failure --output-junit ../../test-results.xml - cd ../.. artifacts: when: always reports: junit: test-results.xml paths: - test-results.xml |
gitlab için, github’takinin birebir benzer, tek bir tetikleme mekanizması bulunmasa da (ya da ben göremedim), aşamalar manuel olarak tetiklenebilmekte. Yukarıda verilen pipeline dosyasındaki aşağıdaki satırlar tam olarak bize bunu sağlıyor olacak:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
workflow: rules: - if: $CI_PIPELINE_SOURCE == "web" build-windows: stage: build build-linux: ... when: manual ... test-linux: ... when: manual ... |
bunları ekledikten sonra gitlab web sayfasında artık aşağıdaki görseller görülebilir:


Bu görsellerde, manuel tetik eklediğimiz adımlar için “play” tuşlarını görebilirsiniz.
Fakat burada da şöyle bir durum oluşuyor. Gitlab’daki manuel her zaman sizden bir girdi bekliyor ve commit’leriniz ile tetiklenmiyor. Yani tam olarak istediğimiz kabiliyet değil ama bunun da elbette bir kullanımı mevcut. Örneğin, pipeline’ları manuel olarak tetiklemek isterseniz, bu kabiliyet sizlere faydalı olabilir. Ayrıca bu kabiliyet ile değişkenler de pipeline’a geçirilebilir.

Evet, bu yazımızın da sonuna geldik. Sonraki yazılarımızda, CI/CD ve conan ile ilgili konulara devam ediyor olacağız. O zamana kadar kalın sağlıcakla. Her türlü görüş ve önerileriniz, yazilimperver@gmail.com ya da yorumlar üzerinden bana iletebilirsiniz.
