Github Actions #9 Running tasks inside the container

Onur BOLATOĞLU
3 min readFeb 20, 2023

GitHub Actions tanımlarımızda container kullanmanın faydaları şunlardır:

  1. Taşınabilirlik: İşlemlerimizi herhangi bir ortamda çalıştırabilmek için kullanılabilir.
  2. Tekrar kullanılabilirlik: Tekrar kullanılabilirliği sağlayan standart bir yapıya sahip oluruz.
  3. İzolasyon: İşlemleri başka işlemlerden ve ana bilgisayar sisteminden izole ederek güvenli bir şekilde yürütmemizi sağlar.
  4. Hızlı başlatma: Docker gibi container teknolojileri, çalışma zamanı ortamlarını hızlı bir şekilde başlatmak için optimize edilmiştir
  5. Çevre bağımlılıklarını yönetme: Projenin çalışması için gereken her şeyi bir arada tutarak, herhangi bir ortamda işlemi yürütmemizi sağlar.

Bu nedenlerden dolayı, GitHub Actions tanımlarımızda container kullanımı, işlemlerimizi daha güvenli ve taşınabilir hale getirirken, yönetmeyi kolaylaştırır ve işlem performansını artırır.

name: Deployment (Container)
on:
push:
branches:
- master
- dev
env:
CACHE_KEY: node-deps
MONGODB_DB_NAME: gha-demo
jobs:
test:
environment: testing
runs-on: ubuntu-latest
container:
image: node:16
env:
MONGODB_CONNECTION_PROTOCOL: mongodb
MONGODB_CLUSTER_ADDRESS: mongodb
MONGODB_USERNAME: root
MONGODB_PASSWORD: Example
PORT: 8080
services:
mongodb:
image: mongo
env:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: Example
steps:
- name: Get Code
uses: actions/checkout@v3
- name: Cache dependencies
uses: actions/cache@v3
with:
path: ~/.npm
key: ${{ env.CACHE_KEY }}-${{ hashFiles('**/package-lock.json') }}
- name: Install dependencies
run: npm ci & hostname & printenv
- name: Run server
run: npm start & hostname & npx wait-on http://127.0.0.1:$PORT # requires MongoDB Atlas to accept requests from anywhere!
- name: Run tests
run: npm test & hostname
- name: Output information
run: |
echo "MONGODB_USERNAME: $MONGODB_USERNAME"
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- name: Output information
env:
PORT: 3000
run: |
echo "MONGODB_DB_NAME: $MONGODB_DB_NAME"
echo "MONGODB_USERNAME: $MONGODB_USERNAME"
echo "${{ env.PORT }}"

Yukarıdaki yaml dosyasını açıklayacak olursak,

container anahtar kelimesi kullanılarak belirtilen Docker container'ı, runs-on anahtar kelimesi altında belirtilen işletim sistemi üzerinde çalıştırılır. Bu container, image anahtar kelimesi ile belirtilen Docker imajını kullanarak oluşturulur.

Container’ın, GitHub Actions tanım dosyasında belirtilen ortam değişkenlerine erişebilmesi için, bu değişkenler env anahtar kelimesi altında tanımlanır. Bu değişkenler, container'ın çalışması sırasında kullanılacak olan ortam değişkenleri olarak kabul edilir. Tanımlanan değişkenler, container içindeki işlemler tarafından kullanılabilir hale getirilir.

Örneğin, yukarıdaki örnekte node:16 Docker imajı kullanılarak oluşturulan bir container, MONGODB_CONNECTION_PROTOCOL, MONGODB_CLUSTER_ADDRESS, MONGODB_USERNAME, MONGODB_PASSWORD ve PORT adlı ortam değişkenlerine erişebilir. Bu değişkenler, container içindeki Node.js uygulaması veya diğer işlemler tarafından kullanılabilir ve değerleri, GitHub Actions tanım dosyasında tanımlandığı gibi kullanılabilir.

Docker servisi, GitHub Actions tanım dosyasında services anahtar kelimesi kullanılarak belirtilir. Bu anahtar kelimesi altında, Docker container'ı olarak çalıştırılacak bir servisin belirtilmesi gerekiyor.

Yukarıdaki örnekte, mongodb adlı servis için mongo Docker imajı kullanılarak bir container başlatılacak. Ayrıca, MONGO_INITDB_ROOT_USERNAME ve MONGO_INITDB_ROOT_PASSWORD ortam değişkenleri belirlenerek, container'ın çalışması için gerekli olan MongoDB yapılandırması yapılmıştır.

GitHub Actions, services anahtar kelimesi altında belirtilen Docker container'larını, test veya deploy gibi işlemlerin gerçekleştirilmesi sırasında kullanabilir. Bu şekilde, gerekli olan tüm ortamların hazırlanması otomatikleştirilerek, işlemlerin daha hızlı ve güvenli bir şekilde gerçekleştirilmesi sağlanır.

Yukarıdaki örnekte, Node container; MongoDB veritabanına bağlanmak için MONGODB_CLUSTER_ADDRESS ortam değişkenini kullanır. Bu ortam değişkeni, MongoDB container'ının adını (mongodb) belirtir ve Node container, MongoDB container'ına bu adla erişebilir.

Örnekte, services anahtar kelimesi altında MongoDB container'ı tanımlanmıştır. Bu, GitHub Actions tarafından başlatılan ikinci bir Docker container'ıdır. Bu container MongoDB veritabanını çalıştırır ve Node container ile iletişim kurmasını sağlar.

Sonuç olarak, Node container ve MongoDB container, birbirleriyle bağlantı kurabilir ve birlikte çalışabilir. node container'ı, mongodb servisinin hazır olduğunu bekleyecek ve sonra MongoDB veritabanına bağlanacak.

Önemli;

Container kullanılan bir Actions tanımında, tüm adımlar ve komutlar container içinde çalıştırılır. Container, bir sanal ortam olarak kullanılır ve GitHub Actions, belirli bir işletim sistemi ve diğer gereksinimlerle yapılandırılmış olan bir Docker image kullanarak bir container oluşturur. Bu Docker image, Actions çalıştırıldığında yürütülen tüm adımların ve komutların çalışacağı ortamı sağlar.

Yani, container altında belirtilen Docker image, Actions'un çalıştırılması için kullanılan sanal bir ortamdır ve steps altındaki tüm adımlar ve komutlar, bu Docker image da yer alan container içinde çalıştırılır. Container, ayrı bir işletim sistemi ortamı olarak çalıştığından, ana işletim sistemi üzerinde bir şeyler çalıştırmak için özel bir adım belirtmek gerekir. Bu nedenle, Docker container'ı içindeki komutlar ve adımlar, ana işletim sistemi üzerinde çalışan komutlar ve adımlardan farklıdır.

Tüm adımlar container içinde çalışırken bile actions/checkout adımı gibi belirli adımlar, ana işletim sistemi üzerinde çalıştırılabilir.

actions/checkout adımı, GitHub repomuzdan kodu almak için kullanılır. Bu adımın amacı, kodu depolama hizmetinden (GitHub, Bitbucket, GitLab vb.) almak ve bunu Actions'un çalıştığı Docker containerına kopyalamaktır.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

No responses yet

Write a response