Ortam değişkenleriyle iş akışınızı özelleştirme

Tamamlandı

Bu ünitede GitHub Actions iş akışlarında değişkenleri, bağlamları ve özel betikleri kullanarak ortama özgü davranışı yapılandırmayı ve yönetmeyi öğreneceksiniz.

Bu işlemi uygulamak için şunları nasıl yapacağınızı öğreneceksiniz:

  • Varsayılan ve özel ortam değişkenlerini kullanın.
  • İş akışlarındaki bağlamsal bilgilere erişin.
  • Farklı iş akışı kapsamlarında ortam değişkenlerini ayarlayın.
  • Run anahtar sözcüğüyle özel betikler kullanın.
  • Dağıtımlar için ortam korumaları uygulama.

Varsayılan ortam değişkenleri ve bağlamları

GitHub Actions iş akışında kullanabileceğiniz birkaç varsayılan ortam değişkeni vardır, ancak yalnızca işi yürüten çalıştırıcı içinde kullanılabilir. Bu varsayılan değişkenler büyük/küçük harfe duyarlıdır ve sistem ve geçerli kullanıcı için yapılandırma değerlerine başvurur. Sabit kodlanmış dosya yollarını kullanmak yerine dosya sistemine başvurmak için bu varsayılan ortam değişkenlerini kullanmanızı öneririz. Varsayılan ortam değişkenini kullanmak için ortam değişkeninin adını belirtin $ .

jobs:
  prod-check:
    steps:
      - run: echo "Deploying to production server on branch $GITHUB_REF"

Varsayılan ortam değişkenlerine ek olarak, tanımlı değişkenleri bağlam olarak kullanabilirsiniz. Bağlamlar ve varsayılan değişkenler, her ikisi de ortam bilgilerine erişim sağladığı için benzerdir, ancak bazı önemli farklılıkları vardır. Varsayılan ortam değişkenleri yalnızca çalıştırıcı içinde kullanılabilse de, iş akışının herhangi bir noktasında bağlam değişkenlerini kullanabilirsiniz. Örneğin, bağlam değişkenleri çalıştırıcı yürütülmeden önce bir if ifadeyi değerlendirmek için bir deyimi çalıştırmanıza olanak sağlar.

name: CI
on: push
jobs:
  prod-check:
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - run: echo "Deploying to production server on branch $GITHUB_REF"

Bu örnek, iş akışını tetikleyen dalı denetlemek için bağlamı kullanır github.ref . Eğer dal main ise, çalıştırıcı çalıştırılır ve "Üretim sunucusuna dal $GITHUB_REF üzerinde dağıtılıyor" ifadesini ekrana yazdırır. Çalıştırıcıda, dalı referans almak için varsayılan ortam değişkeni $GITHUB_REF kullanılır. Varsayılan ortam değişkenlerinin tümünün büyük harf olduğuna ve bağlam değişkenlerinin tümünün küçük harf olduğuna dikkat edin.

İş akışında kullanılabilen bağlamsal bilgiler

İş akışı çalıştırmaları, değişkenler, çalıştırma ortamları, görevler ve adımlar hakkında bilgiye erişmek için bağlamları kullanın. Her bağlam, başka nesneler veya dizeler olabilecek özellikler içeren bir nesnedir. Kullanılabilir bağlamlar arasında github, env, vars, job, jobs, steps, runner, secrets, strategy, matrix, needs ve inputs bulunur.

Aşağıdaki tabloda iş akışı bağlamları ve açıklamaları listelanmaktadır:

Bağlam Açıklama
github İş akışı yürütmesi hakkında bilgi. Daha fazla bilgi için bkz github . bağlam.
env İş akışında, işte veya adımda ayarladığınız değişkenleri içerir. Daha fazla bilgi için bkz env . bağlam.
vars Depo, kuruluş veya ortam düzeyinde ayarladığınız değişkenleri içerir. Daha fazla bilgi için bkz vars . bağlam.
job Çalışmakta olan iş hakkında bilgi. Daha fazla bilgi için bkz job . bağlam.
jobs Yalnızca yeniden kullanılabilir iş akışları için, yeniden kullanılabilir iş akışından işlerin çıkışlarını içerir. Daha fazla bilgi için bkz jobs . bağlam.
steps Çalışmakta olan işte çalıştırılan adımlar hakkında bilgi. Daha fazla bilgi için bkz steps . bağlam.
runner Şu anki işi yürüten koşucu hakkında bilgi. Daha fazla bilgi için bkz runner . bağlam.
secrets İş akışı çalıştırması için erişilebilen gizli bilgilerin adlarını ve değerlerini içerir. Daha fazla bilgi için bkz secrets . bağlam.
strategy Geçerli işin matris yürütme stratejisi hakkında bilgi. Daha fazla bilgi için bkz strategy . bağlam.
matrix geçerli işe uygulanan iş akışında tanımlanan matris özelliklerini içerir. Daha fazla bilgi için bkz matrix . bağlam.
needs Geçerli işe bağımlılık olarak tanımlanan tüm işlerin çıktısını içerir. Daha fazla bilgi için bkz needs . bağlam.
inputs Yeniden kullanılabilir veya el ile tetiklenen bir iş akışının girişlerini içerir. Daha fazla bilgi için bkz inputs . bağlam.

Bir iş akışı çalıştırmasında farklı zamanlarda farklı bağlamlar kullanılabilir. Örneğin, bağlamı secrets yalnızca işin belirli yerlerinde kullanabilirsiniz. Ayrıca işlev gibi hashFiles bazı işlevleri yalnızca belirli yerlerde kullanabilirsiniz.

Aşağıdaki tabloda, bir iş akışındaki her bağlam ve özel işlev için kısıtlamalar listelanmaktadır. Listelenen bağlamlar yalnızca belirtilen iş akışı anahtarı için kullanılabilir. Bunları başka hiçbir yerde kullanamazsınız. Aşağıdaki tabloda listelenmediği sürece herhangi bir yerde işlev kullanabilirsiniz.

İş akışı anahtarı Bağlam Özel işlevler
run-name github, inputs, vars Hiç kimse
concurrency github, inputs, vars Hiç kimse
env github, secrets, inputs, vars Hiç kimse
jobs.<job_id>.concurrency github, needs, strategy, , matrix, inputs, vars Hiç kimse
jobs.<job_id>.container github, needs, strategy, , matrix, vars, inputs Hiç kimse
jobs.<job_id>.container.credentials github, needs, strategy, , matrix, env, vars, secrets, inputs Hiç kimse
jobs.<job_id>.container.env.<env_id> github, , needsstrategy, , matrix, job, runner, env, vars, secrets,inputs Hiç kimse
jobs.<job_id>.container.image github, needs, strategy, , matrix, vars, inputs Hiç kimse
jobs.<job_id>.continue-on-error github, needs, strategy, , vars, matrix, inputs Hiç kimse
jobs.<job_id>.defaults.run github, needs, strategy, , matrix, env, vars, inputs Hiç kimse
jobs.<job_id>.env github, needs, strategy, , matrix, vars, secrets, inputs Hiç kimse
jobs.<job_id>.environment github, needs, strategy, , matrix, vars, inputs Hiç kimse
jobs.<job_id>.environment.url github, , needsstrategy, , matrix, job, runner, env, vars, steps,inputs Hiç kimse
jobs.<job_id>.if github, needs, vars, inputs always, canceled, success, failure
jobs.<job_id>.name github, needs, strategy, , matrix, vars, inputs Hiç kimse
jobs.<job_id>.outputs.<output_id> github, needs, , strategy, matrix, job, runner, , envvars, secrets, steps,inputs Hiç kimse
jobs.<job_id>.runs-on github, needs, strategy, , matrix, vars, inputs Hiç kimse
jobs.<job_id>.secrets.<secrets_id> github, needs, strategy, , matrix, secrets, inputs, vars Hiç kimse
jobs.<job_id>.services github, needs, strategy, , matrix, vars, inputs Hiç kimse
jobs.<job_id>.services.<service_id>.credentials github, needs, strategy, , matrix, env, vars, secrets, inputs Hiç kimse
jobs.<job_id>.services.<service_id>.env.<env_id> github, , needsstrategy, , matrix, job, runner, env, vars, secrets,inputs Hiç kimse
jobs.<job_id>.steps.continue-on-error github, needs, , strategy, matrix, job, runner, , envvars, secrets, steps,inputs hashFiles
jobs.<job_id>.steps.env github, needs, , strategy, matrix, job, runner, , envvars, secrets, steps,inputs hashFiles
jobs.<job_id>.steps.if github, , needsstrategy, , matrix, job, runner, env, vars, steps,inputs always, canceled, success, , failurehashFiles
jobs.<job_id>.steps.name github, needs, , strategy, matrix, job, runner, , envvars, secrets, steps,inputs hashFiles
jobs.<job_id>.steps.run github, needs, , strategy, matrix, job, runner, , envvars, secrets, steps,inputs hashFiles
jobs.<job_id>.steps.timeout-minutes github, needs, , strategy, matrix, job, runner, , envvars, secrets, steps,inputs hashFiles
jobs.<job_id>.steps.with github, needs, strategy, matrix, job, env, runner, vars, secrets, steps, inputs hashFiles
jobs.<job_id>.steps.working-directory github, needs, strategy, matrix, job, env, runner, vars, secrets, steps, inputs hashFiles
jobs.<job_id>.strategy github, ihtiyaçlar, vars, inputs, Hiç kimse
jobs.<job_id>.timeout-minutes github, needs, strategy, , matrix, vars, inputs Hiç kimse
jobs.<job_id>.with.<with_id> github, needs, strategy, , matrix, inputs, vars Hiç kimse
on.workflow_call.inputs.<inputs_id>.default github, inputs, vars Hiç kimse
on.workflow_call.outputs.<output_id>.value github, işler, vars, inputs Hiç kimse

Özel ortam değişkenleri

Varsayılan ortam değişkenlerini kullanmaya benzer şekilde, iş akışı dosyanızda özel ortam değişkenlerini kullanabilirsiniz. Özel bir değişken oluşturmak için bağlamı env kullanarak iş akışı dosyanızda tanımlamanız gerekir. Bir çalıştırıcı içinde ortam değişkeninin değerini kullanmak istiyorsanız, ortam değişkenlerini okumak için çalıştırıcı işletim sisteminin normal yöntemini kullanabilirsiniz.

name: CI
on: push
jobs:
  prod-check:
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - run: echo "Nice work, $First_Name. Deploying to production server on branch $GITHUB_REF"
        env:
          First_Name: Mona

İş akışında özel ortam değişkenleri ayarlama

İş akışı dosyasının en üst düzeyinde kullanarak env iş akışının tamamı kapsamında olan ortam değişkenlerini tanımlayabilirsiniz. jobs.<job_id>.env kullanarak bir iş akışında bir işin içeriğini kapsam içine alın. jobs.<job_id>.steps[*].env kullanarak, bir iş içindeki belirli bir adımda bir ortam değişkeninin kapsamını daraltabilirsiniz.

Bir iş akışı dosyasındaki üç senaryoya da göz atan bir örnek aşağıda verilmiştir:

name: Greeting on variable day

on:
  workflow_dispatch

env:
  DAY_OF_WEEK: Monday

jobs:
  greeting_job:
    runs-on: ubuntu-latest
    env:
      Greeting: Hello
    steps:
      - name: "Say Hello Mona it's Monday"
        run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
        env:
          First_Name: Mona

İş akışında varsayılan bağlamı kullanma

GitHub platformu varsayılan ortam değişkenlerini ayarlar. Bunlar bir iş akışında tanımlanmamıştır, ancak bir iş akışındaki varsayılan ortam değişkenini uygun bağlamda kullanabilirsiniz. bu değişkenlerin çoğu, CI dışındaki, GITHUB_* veya RUNNER_* ile başlar. Son iki türün üstüne yazılamaz. Ayrıca, bu varsayılan değişkenlerin karşılık gelen ve benzer şekilde adlandırılmış bir bağlam özelliği vardır. Örneğin, RUNNER_* varsayılan değişken serisinin eşleşen bağlam özelliği vardır runner.*.

Aşağıdaki yöntemleri uygulayarak bir iş akışındaki varsayılan değişkenlere erişme örneği aşağıda verilmiştir:

on: workflow_dispatch

jobs:
  if-Windows-else:
    runs-on: macos-latest
    steps:
      - name: condition 1
        if: runner.os == 'Windows'
        run: echo "The operating system on the runner is $env:RUNNER_OS."
      - name: condition 2
        if: runner.os != 'Windows'
        run: echo "The operating system on the runner is not Windows, it's $RUNNER_OS."

Daha fazla bilgi için bkz . Varsayılan ortam değişkenleri.

Özel ortam değişkenlerini iş akışına geçirme

İş akışı işinin bir adımındaki özel ortam değişkenlerini işin içindeki sonraki adımlara geçirebilirsiniz. İşin bir adımında bir değer oluşturun ve değeri mevcut veya yeni bir ortam değişkenine atayın. Ardından değişken/değer çiftini GITHUB_ENV ortam dosyasına yazarsınız. Ortam dosyasını bir eylemde veya iş akışı işinde kabuk komutundan anahtar sözcüğünü run kullanarak kullanabilirsiniz.

Ortam değişkenini oluşturan veya güncelleştiren adımın yeni değere erişimi yoktur, ancak bir işteki sonraki tüm adımlara erişim vardır.

İşte bir örnek:

steps:
  - name: Set the value
    id: step_one
    run: |
      echo "action_state=yellow" >> "$GITHUB_ENV"
  - name: Use the value
    id: step_two
    run: |
      printf '%s\n' "$action_state" # This will output 'yellow'

Ortam korumaları ekleme

GitHub deponuz için tanımlanan ortamlar için koruma kuralları ekleyebilirsiniz.

Ortam eklemek için, depo içinde yapmanız gerekenler:

  1. Ayarlarseçin.

    Kod, Sorunlar ve Wiki gibi sekmeler içeren bir web arabiriminin menü çubuğu; Ayarlar vurgulanır.

  2. Sol bölmede Ortam'ı seçin.

    Genel'in altında Erişim, Kod ve otomasyon, Güvenlik ve Tümleştirme bölümleri içeren Ayarlar menüsünün ekran görüntüsü. Ortamlar seçeneği vurgulanır.

  3. Ortam eklemek ve yapılandırmak ve koruma eklemek için Yeni ortam düğmesini seçin.

    Ortam yok iletisinin ve Yeni ortam düğmesinin vurgulandığı Ortamlar bölümünü gösteren GitHub deposu Ayarları sayfasının ekran görüntüsü.

Ortamlar hakkında

Üretim, hazırlama veya geliştirme gibi genel bir dağıtım hedefini açıklamak için ortamları kullanın. GitHub Actions iş akışı bir ortama dağıtıldığında, ortam deponun ana sayfasında görünür. Bir işin devam etmesi için onay gerektirmek, hangi dalların iş akışını tetikleyebileceğini kısıtlamak, özel dağıtım güvenlik kuralları kullanarak dağıtımları kontrol etmek veya gizli bilgilere erişimi sınırlamak için ortamları kullanabilirsiniz.

İş akışındaki her iş bir ortama referans alabilir. Belirlediğiniz koruma kuralları, ortamı referans alan bir görev çalıştırıcıya gönderilmeden önce geçmelidir. İş ortamın gizli bilgilerine ancak iş bir çalıştırıcıya gönderildikten sonra erişebilir.

Bir iş akışı bir ortama başvurduğunda, ortam depo dağıtımlarında görünür.

Ortam koruma kuralları

Ortam dağıtım koruma kuralları, çevreye referans veren bir görev devam etmeden önce belirli koşulların karşılanmasını gerektirir. El ile onay istemek, işi geciktirmek veya ortamı belirli dallara kısıtlamak için dağıtım koruma kurallarını kullanabilirsiniz. GitHub'da yapılandırılan ortamlara başvuran dağıtımları denetlemek için iş ortağı sistemlerini kullanmak üzere GitHub Apps tarafından desteklenen özel koruma kuralları da oluşturabilir ve uygulayabilirsiniz.

Bu koruma kurallarının açıklaması aşağıdadır:

  • Gözden geçirenler için gerekli koruma kuralları. Bu kuralı, belli bir kişi veya ekibin çevreyi referans alan iş akışı görevlerini onaylamasını zorunlu kılmak için kullanın. En fazla altı kullanıcıyı veya ekibi gözden geçiren olarak listeleyebilirsiniz. İnceleme yapanlar, depoda en az okuma iznine sahip olmalıdır. İşin ilerleyebilmesi için yalnızca bir gerekli onaylayıcının işi onaylaması gerekir.

    Korumalı bir ortama yapılan dağıtımlar için kendi kendine gözden geçirmeleri de engelleyebilirsiniz. Bu ayarı etkinleştirirseniz, bir dağıtımı başlatan kullanıcılar gerekli bir gözden geçiren olsalar bile dağıtım işini onaylayamaz. Kendi kendine gözden geçirmeleri etkinleştirerek, korunan ortamlara yapılan dağıtımları birden fazla kişinin gözden geçirmesini sağlar.

    Gerekli gözden geçirenlere referans veren bir ortamda işleri gözden geçirme hakkında daha fazla bilgi için bkz. Dağıtımları gözden geçirme.

  • Süreölçer projeksiyon kurallarını bekleyin. Bir işi, başlangıçta tetiklendikten sonra belirli bir süre geciktirmek için, ortam dağıtımı devam etmeden önce bekleme zamanlayıcısı koruma kuralı kullanabilirsiniz. Süre (dakika cinsinden) 1 ile 43.200 (30 gün) arasında bir tamsayı olmalıdır. Bekleme süresi faturalanabilen sürenize göre sayılmaz.

  • Dal ve etiket koruma kuralları. Ortama dağıtmak için hangi dalların ve etiketlerin kullanılacağını kısıtlamak için dağıtım dalı ve etiket koruma kurallarını kullanabilirsiniz. Bir ortam için dağıtım dalı ve etiket koruma kuralları için çeşitli seçenekleriniz vardır.

    • Hiçbir kısıtlama , hangi dalın veya etiketin ortama dağıtılacağına ilişkin bir kısıtlama ayarlamaz.
    • Korumalı dallar yalnızca ortama dağıtılması için dal koruma kurallarının etkinleştirildiği dallara izin verir. Depodaki herhangi bir dal için hiçbir dal koruma kuralı tanımlanmamışsa, tüm dallar dağıtılabilir. Seçili dallar ve etiketler ayarı yalnızca belirtilen ad desenlerinizle eşleşen dalların ve etiketlerin ortama dağıtılabilmesini sağlar.
    • Dağıtım dalı veya etiket kuralı olarak belirtirseniz releases/* , yalnızca adıyla releases/ başlayan bir dal veya etiket ortama dağıtılabilir. (Joker karakterler / ile eşleşmez. release/ ile başlayan ve başka bir tek eğik çizgi içeren dalları veya etiketleri eşleştirmek için release/*/* kullanın.) main adlı bir dal kuralı olarak eklerseniz, main adlı bir dal da ortama dağıtım yapabilir.
  • Özel dağıtım koruma kuralları. İş ortağı hizmetlerinin kullanımını kontrol etmek için dağıtımlar üzerinde özel koruma kuralları oluşturabilirsiniz. Örneğin, hazır olma durumunu değerlendirmek ve GitHub'a dağıtımlar için otomatik onaylar sağlamak için kullandığınız gözlemlenebilirlik sistemlerini, değişiklik yönetim sistemlerini, kod kalitesi sistemlerini veya diğer el ile yapılandırmaları kullanabilirsiniz.

    Özel dağıtım koruma kuralları oluşturup bunları bir depoya yükledikten sonra, depodaki herhangi bir ortam için özel dağıtım koruma kuralını etkinleştirebilirsiniz.

    Ortam1'i gözden geçirme seçenekleri, bekleme zamanlayıcısı, özel kurallar ve dal kısıtlamaları seçenekleriyle yapılandırmaya yönelik Ayarlar sayfasını gösteren ekran görüntüsü.

Uyarı

GitHub Ücretsiz, GitHub Pro veya GitHub Team planınız varsa, ortam dağıtım projeksiyon kuralları yalnızca genel depolar için kullanılabilir; dal ve etiket koruma kuralları dışında. GitHub Pro veya GitHub Team planlarına sahip kullanıcılar için özel depolar için dal ve etiket koruma kuralları da kullanılabilir.

İş akışınızdaki betikler

Önceki iş akışı kod parçacığı örneklerinde, bir metin dizesini run yazdırmak için anahtar sözcüğü kullanılır. run anahtar sözcüğü işe çalıştırıcıda bir komut yürütmesini söylediğinden, eylemleri veya betikleri çalıştırmak için anahtar sözcüğünü run kullanırsınız.

jobs:
  example-job:
    steps:
      - run: npm install -g bats

Bu örnekte, bats anahtar sözcüğünü kullanarak run yazılım testi paketini yüklemek için npm kullanırsınız. Betiği eylem olarak da çalıştırabilirsiniz. Betiği deponuzda depolayabilir, genellikle bir .github/scripts/ dizinde gerçekleştirilir ve ardından anahtar sözcüğünü run kullanarak yolu ve kabuk türünü sağlayabilirsiniz.

jobs:
  example-job:
    steps:
      - name: Run build script
        run: ./.github/scripts/build.sh
        shell: bash