Github Actions #6 Environment Variables & Secrets
Serinin bu bölümünde, değişkenleri kullanarak kodumuz içerisinde değerli erişim bilgilerini tutmamıza gerek kalmayacak. Misal bir DB bilgisi, Sunucu bilgisi vb. gibi değerli bilgileri. Böylelike uygulamamız build edilirken, tüm bu değerli değişken bilgilerini runner sunucudan alabilecek ve kod dosyamızda bunu tutmamıza gerek kalmayacak.


Workflow dosyamıza kullanmak istediğimiz, ihtiyacımız olan değişkenleri yazarak, bu değişkenleri runner sunucuya bildirebiliriz.
name: Deployment
on:
push:
branches:
- master
- dev
env:
MONGODB_DB_NAME: gha-demo
jobs:
test:
env:
MONGODB_CLUSTER_ADDRESS: cluster0.u9pq2zl.mongodb.net
MONGODB_USERNAME: onur
MONGODB_PASSWORD: rEiThTCX25WM2tv6
PORT: 8080
runs-on: ubuntu-latest
steps:
- name: Get Code
uses: actions/checkout@v3
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.npm
key: npm-deps-${{ hashFiles('**/package-lock.json') }}
- name: Install dependencies
run: npm ci
- name: Run server
run: npm start & npx wait-on http://127.0.0.1:$PORT
- name: Run tests
run: npm test
- name: Output information
run: |
echo "MONGODB_USERNAME: ${{ env.MONGODB_USERNAME }}"
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- name: Output information
run: |
echo "MONGODB_USERNAME: ${{ env.MONGODB_USERNAME }}"
echo "MONGODB_DB_NAME: $MONGODB_DB_NAME"
Yukarıdaki örnekte, 5 adet değişken kullanıyoruz. Değişkenleri istersek jobların içerisinde, dilersek ana context içerisinde belirtebiliriz. Ana context içerisinde kullandığımız değişkenleri tüm runner sistemlerde görebiliriz.
Misal, tests jobu tüm değişkenleri biliyorken, deploy jobu MONGODB_USERNAME değişkeninin değerini bilmiyor. Çünkü, deploy jobu içerisinde bu değişkeni tanımlamadık. Yukarıdaki workflow’u çalıştırdığımızda aşağıdaki gibi bir sonuç elde ederiz.


Workflow dosyanızda da bu değerli bilgileri kullanmak, yazmak istemeyebilirsiniz. Bu değerli bilgileri dilerseniz “secret” objesinden alabilirsiniz.


Repository altında kullanacağınız secret objelerini oluşturur ve workflow dosyasında da bu değişkene ait bilgiyi secret’dan okumasını isteyebiliriz.
name: Deployment
on:
push:
branches:
- master
- dev
env:
MONGODB_DB_NAME: gha-demo
jobs:
test:
env:
MONGODB_CLUSTER_ADDRESS: cluster0.u9pq2zl.mongodb.net
MONGODB_USERNAME: ${{ secrets.MONGODB_USERNAME }} # Secret
MONGODB_PASSWORD: ${{ secrets.MONGODB_PASSWORD }} # Secret
PORT: 8080
runs-on: ubuntu-latest
steps:
- name: Get Code
uses: actions/checkout@v3
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.npm
key: npm-deps-${{ hashFiles('**/package-lock.json') }}
- name: Install dependencies
run: npm ci
- name: Run server
run: npm start & npx wait-on http://127.0.0.1:$PORT
- name: Run tests
run: npm test
- name: Output information
run: |
echo "MONGODB_USERNAME: ${{ env.MONGODB_USERNAME }}"
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- name: Output information
run: |
echo "MONGODB_USERNAME: ${{ env.MONGODB_USERNAME }}"
echo "MONGODB_DB_NAME: $MONGODB_DB_NAME"

Diğer bir yöntem ise, Repository altında bir değişken grubu oluşturuz ve secretları bu grup altına ekleriz. Örnek aşağıdaki gibidir.


Dilersek, değişken grubunu branch bazında özelleştirebiliriz.
Peki bu değişken grubunu workflow’da nasıl kullanacağız?
Bu değişken grubunu kullanabilmemiz için, yukarıda oluşturduğumuz secretları siliyoruz ki, isimler aynı olduğu için çakışmasınlar.
name: Deployment
on:
push:
branches:
- master
- dev
env:
MONGODB_DB_NAME: gha-demo
jobs:
test:
environment: abuzer # Env gr
env:
MONGODB_CLUSTER_ADDRESS: cluster0.qoyo9xe.mongodb.net
MONGODB_USERNAME: ${{ secrets.MONGODB_USERNAME }} # go to env gr
MONGODB_PASSWORD: ${{ secrets.MONGODB_PASSWORD }} # go to env gr
PORT: 8080
runs-on: ubuntu-latest
steps:
- name: Get Code
uses: actions/checkout@v3
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.npm
key: npm-deps-${{ hashFiles('**/package-lock.json') }}
- name: Install dependencies
run: npm ci
- name: Run server
run: npm start & npx wait-on http://127.0.0.1:$PORT
- name: Run tests
run: npm test
- name: Output information
run: |
echo "MONGODB_USERNAME: ${{ env.MONGODB_USERNAME }}"
echo "MONGODB_HOST: ${{ env.MONGODB_CLUSTER_ADDRESS }}"
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- name: Output information
run: |
echo "MONGODB_USERNAME: ${{ env.MONGODB_USERNAME }}"
echo "MONGODB_DB_NAME: $MONGODB_DB_NAME"
Böylelikle workflow değişkenlerin değerlerini okumak için “abuzer” değişken grubuna gidecek ve o grup altında bulunan secret’lardan MONGODB_USERNAME ve MONGODB_PASSWORD secretlarının değerlerini okuyacak.