前期准备:
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
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 按钮保存。就设置完成了。