ایجاد یک محیط استقرار خودکار 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
و رابط زیر را ببینید:
دایرکتوری جنکینزی را که ایجاد کردید باز کنید و به آن بروید jenkins-home
:
/home/jenkins/jenkins-home
را وارد کنید secrets
دایرکتوری:
$ cat initialAdminPassword
محتوای این فایل را کپی کرده و در قسمت رمز عبور مدیر قرار دهید.
بعد، دو افزونه را نصب کنید:
NodeJS Plugin
Publish Over SSH
به پایین اسکرول کنید.
مرجع رسمی
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. در نهایت، یک پروژه در جنکینز ایجاد کنید:
در نهایت، می توانید با خوشحالی روی آن کلیک کنید Build Now
.