برنامه نویسی

ایجاد یک محیط استقرار خودکار Jenkins + Docker + Vue Project

  • اسکریپت‌های شل سفارشی، کنترل محیط استقرار یکپارچه را راحت‌تر و انعطاف‌پذیرتر می‌کنند.
  • اگر سرور جایگزین شود، حجم کاری برای استقرار مجدد نسبتاً کم است.

ابتدا باید یک سرور داشته باشید. من از یک نمونه Alibaba Cloud ECS در منطقه شرق چین استفاده کردم. آموزش های آنلاین زیادی برای خرید سرور وجود دارد. پس از خرید، یک IP عمومی و یک رمز عبور برای ورود به سرور از طریق SSH خواهید داشت.

اگر با Docker آشنایی ندارید، توصیه می کنم ابتدا اسناد آن را بررسی کنید. کانتینرهای Docker مانند کانتینرهای حمل و نقل در یک کشتی باری هستند. هر کانتینر اجناس خود را نگه می دارد و روی دیگران تأثیر نمی گذارد. به عنوان مثال، یک سرویس Redis و یک سرویس MongoDB هر کدام می توانند در کانتینر خود قرار گیرند. این کانتینرها متکی به یک محیط اجرایی هستند که داکر آن را Image می نامد. هر ظرف چرخه حیات خود را مدیریت می کند.

جنکینز یک پروژه نرم افزاری منبع باز است که در جاوا توسعه یافته و عمدتاً برای یکپارچه سازی مداوم استفاده می شود. اساساً به شما این امکان را می‌دهد که اسکریپت‌ها را از قبل بنویسید، و هنگامی که این اسکریپت‌ها با موفقیت اشکال زدایی شدند، می‌توانند به طور خودکار برای استقرارهای آینده بدون تغییر اجرا شوند.

مستندات مرجع

حذف نصب نسخه های قدیمی

$ sudo apt-get remove docker docker-engine docker.io
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نصب از طریق APT

از آنجایی که منابع APT از HTTPS برای اطمینان از دستکاری نشدن نرم افزار در حین دانلود استفاده می کنند، ابتدا باید بسته انتقال HTTPS و گواهینامه های CA را اضافه کنیم.

$ sudo apt-get update
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

$ sudo apt-get install 
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با توجه به مشکلات شبکه در چین، اکیداً توصیه می شود از منابع داخلی استفاده کنید. برای منابع رسمی، نظرات را ببینید.

برای تایید مشروعیت بسته های دانلود شده، کلید GPG را برای منبع نرم افزار اضافه کنید.

$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# Official Source
# $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس منبع نرم افزار Docker را به آن اضافه کنید source.list:

$ sudo add-apt-repository \
    "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
    $(lsb_release -cs) \
    stable"

# Official Source
# $ sudo add-apt-repository \
    # "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    # $(lsb_release -cs) \
    # stable"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

دستور بالا نسخه پایدار منبع Docker CE APT را اضافه می کند. اگر به نسخه آزمایشی یا ساخت شبانه نیاز دارید، آن را تغییر دهید stable به test یا nightly.

نصب Docker CE

کش بسته APT را به روز کنید و Docker CE را نصب کنید:

$ sudo apt-get update

$ sudo apt-get install docker-ce
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نصب خودکار از طریق اسکریپت

برای محیط‌های آزمایش یا توسعه، Docker یک اسکریپت نصب مناسب برای ساده‌سازی فرآیند ارائه می‌کند. در سیستم های اوبونتو، می توانید از این اسکریپت استفاده کنید:

$ curl -fsSL get.docker.com -o get-docker.sh

$ sudo sh get-docker.sh --mirror Aliyun
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اجرای این دستور به طور خودکار همه چیز را آماده می کند و نسخه Edge Docker CE را روی سیستم شما نصب می کند.

راه اندازی Docker CE

$ sudo systemctl enable docker

$ sudo systemctl start docker
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ایجاد گروه کاربری Docker

به طور پیش فرض، دستورات داکر با موتور داکر با استفاده از سوکت یونیکس ارتباط برقرار می کنند. فقط کاربر اصلی و کاربران گروه داکر می توانند به سوکت یونیکس موتور داکر دسترسی داشته باشند. به دلایل امنیتی، معمولاً استفاده از کاربر ریشه مستقیماً در سیستم لینوکس توصیه نمی شود. یک رویکرد بهتر این است که کاربرانی را که نیاز به استفاده از Docker دارند به گروه کاربری Docker اضافه کنید.

ایجاد گروه Docker:

$ sudo groupadd docker
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کاربر فعلی را به گروه Docker اضافه کنید:

$ sudo usermod -aG docker $USER
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

از سیستم خارج شوید و دوباره وارد شوید، سپس Docker را تست کنید.

تست نصب داکر

$ docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image, which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر خروجی بالا را مشاهده کردید، نصب با موفقیت انجام شد.

شتاب تصویر

اگر متوجه شدید که کشیدن تصاویر Docker بسیار کند است، می توانید شتاب تصویر داخلی Docker را پیکربندی کنید.

شتاب آینه ابری علی بابا

مستندات مرجع

برای دانلود آخرین نسخه پایدار Docker Compose، این دستور را اجرا کنید:

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مجوزهای اجرایی را به باینری اعمال کنید:

$ sudo chmod +x /usr/local/bin/docker-compose
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نسخه را بررسی کنید:

$ docker-compose --version
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای نصب Jenkins، من استفاده از Docker Compose را انتخاب کردم. Docker Compose عملیات Docker را خودکار می کند و به شما امکان می دهد تمام عملیات پیچیده Docker را با یک فرمان کامل کنید.

ابتدا یک ساختار دایرکتوری روی سرور ایجاد کنید (این فقط یک نسخه آزمایشی است):

/home/jenkins
     - docker-compose.yml
     - jenkins-home
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بعد، یک بنویسید docker-compose.yml فایل برای نصب جنکینز:

version: '3'    # Specifies the format of the docker-compose.yml file
services:       # Collection of multiple containers
  docker_jenkins: 
    user: root  # Using root to avoid some permission issues
    restart: always # Restart policy
    image: jenkins/jenkins:lts  # Specifies the image to use, in this case, LTS (Long-Term Support)
    container_name: jenkins # Container name
    ports:      # Exposed ports
      - '8080:8080'
      - '50000:50000'
    volumes:    # Volume mount paths
      - /home/jenkins/jenkins_home/:/var/jenkins_home  # Mounts the directory we created to Jenkins's home directory inside the container
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker     # Allows the use of Docker commands inside the container
      - /usr/local/bin/docker-compose:/usr/local/bin/docker-compose # Allows the use of Docker Compose commands inside the container
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به دایرکتوری جنکینز بروید و اجرا کنید:

$ docker-compose up -d
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این دستور به طور خودکار تصویر را می کشد و همه چیز را پیکربندی می کند.

اگر همه چیز خوب پیش رفت، اکنون می توانید به سرور خود در این آدرس دسترسی داشته باشید http://your-server-address:port و رابط زیر را ببینید:

16c1d9374b5e2e3e%7Etplv t2oaga2asx image

دایرکتوری جنکینزی را که ایجاد کردید باز کنید و به آن بروید jenkins-home:

/home/jenkins/jenkins-home
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

16c1d94e758452f9%7Etplv t2oaga2asx image

را وارد کنید secrets دایرکتوری:

$ cat initialAdminPassword
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

16c1d97fed386f9f%7Etplv t2oaga2asx image

محتوای این فایل را کپی کرده و در قسمت رمز عبور مدیر قرار دهید.

16c1d9c03f8e46ce%7Etplv t2oaga2asx image

16c1d9c622f48be9%7Etplv t2oaga2asx image

بعد، دو افزونه را نصب کنید:

NodeJS Plugin
Publish Over SSH
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

16c1d9e695b0edfa%7Etplv t2oaga2asx image
16c1da1244bf7efc%7Etplv t2oaga2asx image

به پایین اسکرول کنید.

16c1da21665f1ac2%7Etplv t2oaga2asx image
16c1da265c2bd528%7Etplv t2oaga2asx image
16c1da36f618510d%7Etplv t2oaga2asx image
16c1da5e695030f3%7Etplv t2oaga2asx image

مرجع رسمی

1. ابتدا یک را ایجاد کنید nginx.conf فایل در دایرکتوری ریشه پروژه شما:

user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
  worker_connections  1024;
}
http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;
  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  '$status $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';
  access_log  /var/log/nginx/access.log  main;
  sendfile        on;
  keepalive_timeout  65;
  server {
    listen       80;
    server_name  www.lovelp.xin;  # Domain name
    location / {
      root   /app;  # Directory location
      index  index.html;
      try_files $uri $uri/ /index.html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   /usr/share/nginx/html;
    }
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. ایجاد یک Dockerfile در دایرکتوری اصلی پروژه شما:

FROM node
WORKDIR /app

COPY package*.json ./
RUN npm install -g cnpm --registry=https://registry.npm.taobao.org
RUN cnpm install
COPY ./ /app
RUN npm run build:prod

FROM nginx
RUN mkdir /app
COPY --from=0 /app/dist /app
COPY nginx.conf /etc/nginx/nginx.conf
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

3. ایجاد یک setup.sh اسکریپت در دایرکتوری ریشه پروژه شما برای کمک به اجرای دستورات:

#!/usr/bin/env bash
image_version=`date +%Y%m%d%H%M`;
# Stop the shop_admin container
docker stop shop_admin || true;
# Remove the shop_admin container
docker rm shop_admin || true;
# Remove the shop/admin image
docker rmi --force $(docker images | grep shop/admin | awk '{print $3}')
# Build the shop/admin:$image_version image
docker build . -t shop/admin:$image_version;
# List the images
docker images;
# Create a container named shop_admin from the shop/admin image
docker run -p 9527:80 -d --name shop_admin shop/admin:$image_version;
# View logs
docker logs shop_admin;
# Remove images generated during the build process
docker rmi $(docker images -f "dangling=true" -q)
# Automatically clean up space
docker system prune -a -f
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

4. در نهایت، یک پروژه در جنکینز ایجاد کنید:

16c1da7e5163cf18%7Etplv t2oaga2asx image

16c1da92d3f61f9b%7Etplv t2oaga2asx image

16c1da976268c023%7Etplv t2oaga2asx image

16c1db1c3130fed4%7Etplv t2oaga2asx image

در نهایت، می توانید با خوشحالی روی آن کلیک کنید Build Now.

16c1db3f07153468%7Etplv t2oaga2asx image

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا