Linux Centos7下使用Jenkins + Docker + Git + Nodejs 實現自動編譯發佈VUE前端代碼

前期準備:

docker安裝看這篇:centos7安裝docker及docker常用命令

jenkins安裝看這篇: centos7 Jenkins 安裝與卸載  建議選擇 docker安裝Jenkins

 

一、項目文件介紹

# 項目文件
├── /home/www/jenkins/front                           # 項目文件(把vue項目文件放裏面)  
├── /home/www/jenkins/node-v10.15.1-linux-x64.tar.gz  # nodejs安裝包
├── /home/www/jenkins/Dockerfile                      # 鏡像文件
├── /home/www/jenkins/docker-compose.src.yml          # Docker 部署文件
├── /home/www/jenkins/deploy_jenkins.sh               # 部署腳本
├── /home/www/jenkins/Jenkinsfile                     # Jenkins Pipeline 文件
├── /home/www/jenkins/default.conf                    # nginx配置文件

#修改權限
chmod -R 755 /home/www/jenkins/*

# 倉庫地址:ssh://[email protected]:29418/www/jenkins.git
# 在git創建倉庫,並把/home/www/jenkins下的內容上傳到git
cd /home/www/jenkins
git init
git remote add origin ssh://[email protected]:29418/www/jenkins.git
git add .
git commit -m 'first commit'
git push -u origin master

default.conf

server {
	listen       80;
	#listen       443;
	server_name  localhost;
	
	#ssl_certificate      mycert.crt;
	#ssl_certificate_key  mycert.key;
	
	#charset koi8-r;
	
	#access_log  logs/admin.access.log  main;
	
	location / {
		#前端vue服務端口3000
		proxy_pass  http://localhost:3000;
	}
	
	location ~ asset
	{
		#後端代碼已經部署在81端口下,所以靜態資源目錄asset,反向代理到81
		expires 30d;
		proxy_pass  http://10.1.1.198:81;
	}
}

Dockerfile

FROM nginx

ENV REFRESHED_AT 2019-03-08

RUN mkdir -p /home/front

#WORKDIR 相當於cd
WORKDIR /home/front

#把編譯的文件拷貝到容器中,並自動解壓
ADD front /home/front

#把修改好的nginx配置文件拷貝到容器裏面
COPY default.conf /etc/nginx/conf.d/default.conf

#ADD  文件放在當前目錄下,拷過去會自動解壓
ADD node-v10.15.1-linux-x64.tar.gz /home

RUN ln -s /home/node-v10.15.1-linux-x64/bin/node /usr/bin/node && ln -s /home/node-v10.15.1-linux-x64/bin/npm /usr/bin/npm 

#安裝依賴包,如果你項目中已經存在node_modules依賴包這項可以註釋掉
#RUN npm install

#編譯
RUN npm build

RUN ln -s /home/front/node_modules/pm2/bin/pm2 /usr/bin/pm2

EXPOSE 91

STOPSIGNAL SIGTERM

CMD npm start && pm2 restart all && nginx -g "daemon off;"

docker-compose.src.yml

version: '3.4'
services:
  jenkins_demo:
    image: IMAGE_LATEST
    deploy:
      restart_policy:
        condition: on-failure
    #expose:
    # - "91"
    ports:
      - 91:80
    restart: always
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./front:/home/front

deploy_jenkins.sh

#!/bin/bash

# 容器名稱
CONTAINER="jenkins_demo"
# 鏡像名稱(以日期時間爲鏡像標籤,防止重複)
IMAGE=$CONTAINER":"$(date -d "today" +"%Y%m%d_%H%M%S")

# 刪除滾動更新殘留的容器
docker rm `docker ps -a | grep -w $CONTAINER"_"$CONTAINER | awk '{print $1}'`
# 強制刪除滾動更新殘留的鏡像
docker rmi --force `docker images | grep -w $CONTAINER | awk '{print $3}'`

# 創建新鏡像
docker build -t $IMAGE . && \

# 刪除 docker-compose.jenkins.yml 文件,防止使用相同鏡像
rm -rf docker-compose.jenkins.yml && \

# 複製 docker-compose.src.yml 文件,防止污染原文件
cp docker-compose.src.yml docker-compose.jenkins.yml && \

# 替換鏡像名標誌位爲最新鏡像
sed -i s%IMAGE_LATEST%$IMAGE%g docker-compose.jenkins.yml && \

# 使用 docker stack 啓動服務
docker stack deploy -c docker-compose.jenkins.yml $CONTAINER

Jenkinsfile

pipeline {
  agent none
  stages {
    stage('Deploy') {
      agent any
      steps {
        echo 'Deploying'
        sh './deploy_jenkins.sh'
      }
    }
  }
}

二、手動部署腳本--查看是否正常

cd /home/www/jenkins

./deploy_jenkins.sh

看到如圖基本就部署完成了。 

查看容器啓動成功

docker ps

然後訪問 http://10.1.1.198:91/就可以看直接的項目了

 

三、配置jenkins 

1、jenkins安裝看這篇 centos7 Jenkins 安裝與卸載  建議選擇 docker安裝Jenkins 

2、新建項目,選擇流水線--》然後點擊下面 確定 按鈕

3、設置,如果出現如下錯誤,是因爲沒有添加ssh證書。

4、解決報錯

報錯信息:

Failed to connect to repository : Command "git ls-remote -h ssh://[email protected]:29418/dahuasecurity/jenkins.git HEAD" returned status code 128:
stdout: 
stderr: Password authentication 
Password authentication 
Password authentication 
Permission denied, please try again. 
Permission denied, please try again. 
[email protected]: Permission denied (password,keyboard-interactive,publickey). 
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

 解決方法:

查看容器 找到  jenkins 容器id或者名稱

docker ps

進入容器:

docker exec -it jenkins /bin/bash

然後執行:

git ls-remote -h ssh://[email protected]:29418/dahuasecurity/jenkins.git HEAD

然後:

cd ~/.ssh
ls

查看到目錄下有  known_hosts 文件,然後

cat known_hosts

查看裏面內容:

[10.1.0.37]:29418 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCi9OLXNPseWcwvBOPXpV4cCOgCc6/Rc2kTRnu6jW0iwfgm69sHEMc1iHvxIsmonntm4P4VQrz3jlU4q+2Uk6FrsQPYpYbKoLJ74vWWQOys3h1gWcshFHo49vnhZqBdvhRmsiwNYxLWo+AqQGjEJ68eXf6rKUKlLLE79ZuiOFJKLNikl00sBbbL4PV2HEDaQ42VMu8zXGAFF2xrIGcNVc1mNdL7vvdmKrR0W/e3dJlSgSGLlzYSoTVtqu0ZYztfZEFcVE62bF4ryCiCLkoM88weYGbO9avDwooTXyg7j4Z8QfgpJJOPTKvb2PCVwKWzzEYdqBbJjuquqgxwrF7KlFuj

然後把回到頁面,點擊Add

然後把祕鑰和用戶名,密碼填入保存。

最後:

然後點擊最底部的 Save 按鈕保存。就設置完成了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章