Kontinuirana integracija (CI) i Kontinuirana isporuka (CD) su ključne prakse u DevOps-u koje omogućavaju timovima da isporučuju softver brže, pouzdanije i sa većim kvalitetom. CI/CD pipeline automatizuje procese build-a, testiranja i deployment-a, smanjujući manuelni rad i rizik od grešaka. Za DevOps inženjera, razumevanje i implementacija CI/CD-a je fundamentalna veština. Ovaj tutorijal će vas provesti kroz principe CI/CD-a, ključne alate i praktične primere implementacije.
CI/CD donosi brojne prednosti koje su u srcu DevOps filozofije:
Kontinuirana integracija je praksa u kojoj razvojni timovi često integrišu svoj kod u zajednički repozitorijum (npr. Git). Svaka integracija se automatski verifikuje build-om i automatizovanim testovima.
zelenim), što znači da svi testovi prolaze i da nema grešaka.
.gitlab-ci.yml fajla u repozitorijumu..github/workflows direktorijumu.Ovaj primer pokazuje kako se može kreirati jednostavan CI pipeline za Python aplikaciju koja pokreće testove.
Kreirajte fajl .github/workflows/python-app.yml u vašem repozitorijumu:
name: Python CI
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.x
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests
run: |
pytestOvaj pipeline će se pokrenuti pri svakom push-u na main granu ili pri svakom pull requestu. Instaliraće Python zavisnosti iz requirements.txt i pokrenuti pytest testove.
Kontinuirana isporuka je praksa u kojoj se softver, nakon uspešne CI faze, automatski priprema za izdanje. To znači da je u svakom trenutku spreman za deployment u produkciju, iako se deployment u produkciju može pokrenuti manuelno.
Alati za CD se često preklapaju sa CI alatima, jer mnogi CI alati nude i CD funkcionalnost. Dodatno, koriste se i alati za upravljanje konfiguracijom i orkestraciju:
Ovaj primer opisuje korake za jednostavan CD pipeline koji koristi Jenkins za orkestraciju i Ansible za deployment na udaljeni server.
Jenkinsfile (Pipeline as Code):
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building the application...'
// Ovde bi išao build komanda, npr. mvn clean install ili npm run build
sh 'echo "Simuliram build..." > app.jar'
}
}
stage('Test') {
steps {
echo 'Running tests...'
// Ovde bi išli testovi, npr. pytest ili unit tests
sh 'echo "Simuliram testove..."'
}
}
stage('Deploy to Staging') {
steps {
echo 'Deploying to Staging environment...'
// Pokreni Ansible playbook za staging
sh 'ansible-playbook -i staging_inventory.ini deploy_app.yml'
}
}
stage('Manual Approval for Production') {
steps {
input message: 'Approve deployment to Production?'
}
}
stage('Deploy to Production') {
steps {
echo 'Deploying to Production environment...'
// Pokreni Ansible playbook za production
sh 'ansible-playbook -i production_inventory.ini deploy_app.yml'
}
}
}
}
Ansible Playbook (deploy_app.yml):
---
- name: Deploy Web Application
hosts: webservers
become: yes
tasks:
- name: Stop web server
systemd: name=nginx state=stopped
- name: Copy application artifact
copy:
src: app.jar # Pretpostavimo da je ovo artefakt iz Jenkins builda
dest: /var/www/html/app.jar
- name: Start web server
systemd: name=nginx state=started
- name: Ensure web server is enabled and running
systemd: name=nginx state=started enabled=yesAnsible Inventory (staging_inventory.ini):
[webservers]
staging_web_server ansible_host=192.168.1.10Ansible Inventory (production_inventory.ini):
[webservers]
prod_web_server_1 ansible_host=10.0.0.1
prod_web_server_2 ansible_host=10.0.0.2Ovaj primer pokazuje kako se Jenkins pipeline može integrisati sa Ansible-om za automatizovan deployment na različita okruženja, uključujući i manuelnu potvrdu pre produkcije.
Kontinuirana integracija i isporuka su srž modernog DevOps-a. Automatizacijom procesa build-a, testiranja i deployment-a, timovi mogu značajno poboljšati brzinu, pouzdanost i kvalitet isporuke softvera. Kao DevOps inženjer, ovladavanje CI/CD principima i alatima je ključno za vaš uspeh i doprinos timu. Kontinuirano učenje i eksperimentisanje sa različitim alatima i strategijama će vam pomoći da postanete ekspert u ovoj oblasti.
Autor: Manus AI Datum: 27. jul 2025.