Chuyển tới nội dung

Lab01: Cài đặt Jenkins với Docker Compose

1. Cài đặt Jenkins với Docker Compose

Cấu trúc thư mục

├── gitlab
│   ├── config
│   ├── data
│   └── logs
├── gitlab-runner
│   └── config
├── jenkins
│   ├── agent
│   └── jenkins_home
├── lost+found
└── setup
    ├── docker-compose.yaml
    └── jenkins
	      ├── agent
	      │     └── Dockerfile
              └── Dockerfile

Nội dung docker-compose.yaml

version: '3.8'

services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    container_name: gitlab
    restart: always
    hostname: 'gitlab.local'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
        external_url 'http://gitlab.local'

        ### SMTP config for Gmail
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['smtp_address'] = "smtp.gmail.com"
        gitlab_rails['smtp_port'] = 587
        gitlab_rails['smtp_user_name'] = "[email protected]"
        gitlab_rails['smtp_password'] = "your_app_password"
        gitlab_rails['smtp_domain'] = "smtp.gmail.com"
        gitlab_rails['smtp_authentication'] = "login"
        gitlab_rails['smtp_enable_starttls_auto'] = true
        gitlab_rails['smtp_tls'] = false

        gitlab_rails['gitlab_email_from'] = '[email protected]'
        gitlab_rails['gitlab_email_reply_to'] = '[email protected]'
        gitlab_rails['gitlab_email_display_name'] = 'GitLab'
    ports:
      - '80:80'
      - '443:443'
      - '2222:22'
    volumes:
      - '/opt/gitlab/config:/etc/gitlab'
      - '/opt/gitlab/logs:/var/log/gitlab'
      - '/opt/gitlab/data:/var/opt/gitlab'
    networks:
      - gitlab-network

  gitlab-runner:
    image: 'gitlab/gitlab-runner:latest'
    container_name: gitlab-runner
    restart: always
    depends_on:
      - gitlab
    volumes:
      - '/opt/gitlab-runner/config:/etc/gitlab-runner'
      - '/var/run/docker.sock:/var/run/docker.sock'
    networks:
      - gitlab-network

  jenkins:
    build:
      context: ./jenkins
    container_name: jenkins
    restart: unless-stopped
    privileged: true
    user: root
    ports:
      - "8080:8080"   # Jenkins UI
      - "50000:50000" # Agent communication
    volumes:
      - /home/iadmin/.kube:/root/.kube           # mount local kube config
      - /home/iadmin/.minikube:/root/.minikube   # mount minikube certs and keys
      - /opt/jenkins/jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock # Allows Jenkins to run docker commands
    networks:
      - gitlab-network
    extra_hosts:
      - "gitlab.local:host-gateway"

  jenkins-agent:
    build:
      context: ./jenkins/agent
    container_name: jenkins-agent
    restart: unless-stopped
    privileged: true
    extra_hosts:
      - "jenkins.local:host-gateway"
    environment:
      - JENKINS_URL=http://jenkins:8080
      - JENKINS_AGENT_NAME=docker-agent
      - JENKINS_SECRET=<SECRET>
      - JENKINS_WEB_SOCKET=true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/jenkins/agent:/home/jenkins/agent
    networks:
      - gitlab-network

volumes:
  jenkins_home:
    name: jenkins_home

networks:
  gitlab-network:
    external: true
    name: gitlab-network

Nội dung file jenkins/Dockerfile

FROM jenkins/jenkins:lts
USER root
 
# install curl, kubectl and docker CLI
RUN apt-get update \
  && apt-get install -y ca-certificates curl apt-transport-https gnupg2 lsb-release docker.io \
  && curl -fsSL "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" -o /usr/local/bin/kubectl \
  && chmod +x /usr/local/bin/kubectl /usr/bin/docker || true \
  && apt-get clean && rm -rf /var/lib/apt/lists/*

USER jenkins

Nội dung file jenkins/agent/Dockerfile

FROM jenkins/inbound-agent:latest
USER root

# install docker CLI and kubectl
RUN apt-get update \
  && apt-get install -y ca-certificates curl apt-transport-https gnupg2 lsb-release docker.io \
  && curl -fsSL "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" -o /usr/local/bin/kubectl \
  && chmod +x /usr/local/bin/kubectl /usr/bin/docker \
  && usermod -aG docker jenkins || true \
  && apt-get clean && rm -rf /var/lib/apt/lists/*

USER jenkins

Khởi chạy môi trường
docker compose up -d
Sau khi Jenkins khởi động:

  • Truy cập http://jenkins.local:8080
  • Xem mật khẩu khởi tạo ban đầu:
    • docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
  • Dán vào màn hình “Unlock Jenkins”.
  • Cài đặt plugin khuyến nghị.

2. Giao diện và cấu hình Jenkins

Đăng nhập vào Giao diện Jenkins

Dashboard: danh sách các pipeline

Manage Jenkins: Cấu hình hệ thống, cài plugin, credentials,..

Users/People: Quản lý User

Credentials: Nói lưu mật khẩu, token an toàn

Cài đặt plugin cần thiết

– Vào Manage Jenkins -> Plugins -> Available Plugins

Cài đặt các plugin:

  • Blue Ocean
  • Docker Pipeline
  • Kubernetes CLI
  • Gitlab Plugin
  • Role-based Authorization Strategy

Phân quyền RBAC và tạo user CTO

Bật phân quyền:

  • Vào Manage Jenkins -> Configure Global Security
  • Chọn
    • ✅ “Enable security”
    • ✅ “Jenkins’ own user database”
    • ✅ “Matrix-based security”

Tạo User:

  • Manage Jenkins -> Users -> Create User
    • User: dev, cto
    • Password:

Cấp quyền:

Trong Matrix Authorization:

  • admin: tất cả quyền
  • cto: chỉ có quyền (Read, Build, Job -> Discovery, Read, Build, Overall -> Read)
  • dev:

Liên hệ