Runner'ı CI hattına ekleme
Analiz, kodunuzun zaten bulunduğu CI hattında çalışır - kaynak kodunuz altyapınızdan çıkmaz. Aşağıdaki örneklerde runner, projeye özel token ile çağrılır.
Tüm örnekler imajı AppArch Hub’dan çeker; kimlik doğrulama, dil eşleştirme ve sık hatalar için o sayfaya bakın.
GitHub Actions
Bölüm başlığı “GitHub Actions”name: AppArchon: [pull_request]jobs: review: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 # the target branch is then in the clone: the change's own files and its merge base - run: | echo "$APPARCH_INSTALLATION_KEY" | docker login hub.apparch.io -u "$APPARCH_INSTALLATION_ID" --password-stdin docker run --rm -v "$PWD:/workspace:ro" \ -e APPARCH_Collector__Token="$APPARCH_TOKEN" \ -e APPARCH_Collector__ApiUrl="https://api.yourdomain.com" \ -e GITHUB_EVENT_NAME -e GITHUB_REF -e GITHUB_REPOSITORY \ -e GITHUB_SERVER_URL -e GITHUB_BASE_REF -e GITHUB_SHA \ hub.apparch.io/collectors/dotnet:latest /workspace env: APPARCH_TOKEN: ${{ secrets.APPARCH_TOKEN }} APPARCH_INSTALLATION_ID: ${{ secrets.APPARCH_INSTALLATION_ID }} APPARCH_INSTALLATION_KEY: ${{ secrets.APPARCH_INSTALLATION_KEY }}GitLab CI
Bölüm başlığı “GitLab CI”# Image pulls are authorized with your INSTALLATION credential, not the project token# (Settings → CI/CD → Variables):# DOCKER_AUTH_CONFIG = {"auths":{"hub.apparch.io":{"auth":"base64(<installation-id>:<installation-key>)"}}}archpilot: image: hub.apparch.io/collectors/dotnet:latest rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" variables: APPARCH_Collector__Token: "$APPARCH_TOKEN" APPARCH_Collector__ApiUrl: "https://api.yourdomain.com" script: # Optional flags: --modules archpilot,archscan (pin what runs) # Yalnızca --modules archpilot verilirse SADECE MR'ın değişen dosyaları okunur - MR # pipeline'ı için hızlı seçenek; archscan / archsecurity depo raporudur, her şeyi okur. # --fail-on critical (fail this step when findings at/above the level exist) - apparch "$CI_PROJECT_DIR"Bitbucket Pipelines
Bölüm başlığı “Bitbucket Pipelines”pipelines: pull-requests: '**': - step: image: name: hub.apparch.io/collectors/dotnet:latest username: $APPARCH_INSTALLATION_ID password: $APPARCH_INSTALLATION_KEY run-as-user: 0 # the clone belongs to root; a PR run fetches the target branch into it script: - export APPARCH_Collector__Token="$APPARCH_TOKEN" - export APPARCH_Collector__ApiUrl="https://api.yourdomain.com" - apparch "$BITBUCKET_CLONE_DIR"Azure DevOps
Bölüm başlığı “Azure DevOps”trigger: nonepr: ['*']pool: { vmImage: ubuntu-latest }steps: - checkout: self fetchDepth: 0 # the target branch is then in the clone: the change's own files and its merge base - script: | echo "$(APPARCH_INSTALLATION_KEY)" | docker login hub.apparch.io -u "$(APPARCH_INSTALLATION_ID)" --password-stdin docker run --rm -v "$(Build.SourcesDirectory):/workspace:ro" \ -e APPARCH_Collector__Token="$(APPARCH_TOKEN)" \ -e APPARCH_Collector__ApiUrl="https://api.yourdomain.com" \ -e SYSTEM_PULLREQUEST_PULLREQUESTID="$(System.PullRequest.PullRequestId)" \ -e SYSTEM_PULLREQUEST_TARGETBRANCH="$(System.PullRequest.TargetBranch)" \ -e SYSTEM_TEAMPROJECT="$(System.TeamProject)" \ -e BUILD_REPOSITORY_NAME="$(Build.Repository.Name)" \ -e SYSTEM_COLLECTIONURI="$(System.CollectionUri)" \ -e BUILD_SOURCEVERSION="$(Build.SourceVersion)" \ hub.apparch.io/collectors/dotnet:latest /workspaceJenkins
Bölüm başlığı “Jenkins”pipeline { agent { docker { image 'hub.apparch.io/collectors/dotnet:latest' registryUrl 'https://hub.apparch.io' registryCredentialsId 'apparch-hub' } } environment { APPARCH_Collector__Token = credentials('APPARCH_TOKEN') APPARCH_Collector__ApiUrl = 'https://api.yourdomain.com' // PR review (ArchPilot) needs the MR context set explicitly; without these the run is a full scan (ArchScan). APPARCH_Collector__Provider__Type = 'gitlab' // gitlab | github | bitbucket | azuredevops APPARCH_Collector__Provider__ProjectId = 'group/project' APPARCH_Collector__Provider__PullRequestId = "${env.CHANGE_ID}" } stages { stage('AppArch') { steps { sh 'apparch "$WORKSPACE"' } } }}Bir sonraki PR/MR açıldığında ArchPilot satır satır yorum bırakır. Runner modu otomatik seçer: MR/PR pipeline’ında hızlı inceleme (ArchPilot), push pipeline’ında tam tarama (ArchScan) çalışır.
Konteyner kullanıcısı
Bölüm başlığı “Konteyner kullanıcısı”Collector imajları root olmayan bir kullanıcıyla (uid 10001) çalışır ve başka bir kullanıcıya ait olabilen checkout’u yalnızca okur. Pull request’te collector değişikliği hedef dalla karşılaştırır (değişikliğin kendi dosyaları, merge base’i); bu yüzden o dal klonda bulunmalıdır:
- GitHub Actions ve Azure DevOps: örnekler tüm geçmişi checkout eder (
fetch-depth: 0,fetchDepth: 0); hedef dal zaten oradadır ve hiçbir şey yazılmaz. - GitLab CI ve Jenkins: olduğu gibi çalışır (GitLab’ın klonu job’a yazılabilir, Jenkins konteyneri kendi kullanıcısıyla çalıştırır).
- Bitbucket Pipelines: klon her zaman root’a aittir ve collector hedef dalı bu klona çeker; bu yüzden
örnek adımı root olarak çalıştırır (
run-as-user: 0).
Bunlar olmadan koşu yine geçer, ama değişikliğin bulguları yerine bütün bulguları inceler ve hedef dalla
karşılaştıran kontrolleri (kaldırılan yetkilendirme, yeni bağımlılık döngüsü) atlar. Runner’ınız başka bir
yerde root’ta ısrar ediyorsa bunu açıkça belirtin: docker run --user 0 ..., Kubernetes’te
securityContext.runAsUser: 0.
Self-signed veya iç CA sertifikaları
Bölüm başlığı “Self-signed veya iç CA sertifikaları”AppArch kurulumunuz CI runner’ın güvenmediği bir sertifikayla sunuluyorsa - iç CA ya da self-signed - koşu, kural çekme adımında TLS hatasıyla düşer. İki çıkış yolu var, tercih sırasıyla:
- CA’yı runner imajında güvenilir yapın. Sertifika o zaman her sertifika gibi doğrulanır ve collector tarafında hiçbir şey değişmez.
- Doğrulamayı
SslVerifyile kapatın:
SslVerify=false # ya da SSL_VERIFY, ya da APPARCH_Collector__SslVerifyfalse, 0, no ve off kapatır; bunun dışında kalan her şey - boş dahil - açık bırakır. .NET
collector ayrıca --no-ssl-verify bayrağını kabul eder. Her koşu açılış bloğunda
ssl verify on ya da ssl verify OFF - server certificate not checked yazar; yani doğrulamayı
zayıflatan bir pipeline bunu kendi log’unda söyler.