前端构建
- 在 Jenkins + Gitlab 实现前端构建 中简单实现了gitlab+jenkins的自动化部署 现在增加nexus
- 之前的流程为jenkins拉取gitlab代码 ==> build打包压缩资源 ==> 通过scp上传压缩包 ==> ssh远程执行解压部署 ==> 访问nginx服务器
- 引入nexus之后替换为 Dockerfile构建镜像 ==> 上传镜像到制品库 => 远程执行命令拉取镜像,停止容器,删除容器,启动新拉取的镜像
Nexus制品库
- nexus启动
docker pull sonatype/nexus3
// 启动容器 需要分配两个端口 8081是主服务端口 8082作为docker的服务端口
docker run -d -p 8081:8081 -p 8082:8082 \
--name nexus \
-v ~/nexus:/nexus-data \
--restart always \
sonatype/nexus3
- 访问 http://172.30.57.181:8081/ (初始会很慢可以使用docker logs -f nexus查看进度)
- 登录docker exec -it nexus /bin/bash cat /nexus-data/admin.password获取初始密码 (查看的时候 这里可能没换行) 修改密码 admin admin
- 创建一个docker私服
- Create repository 选择docker hosted类型 加上配置的http端口
- http://172.30.57.181:8081/:8081/repository/docker/
- proxy: 此类型制品库原则上 只下载,不允许用户推送 可以理解为缓存外网制品的制品库。缓存
- hosted:此类型制品库和proxy相反,原则上 只允许用户推送,不允许缓存 这是私有库的核心 只存放自己的私有镜像或制品
- group:此类型制品库用作以上两种类型的集合,将上面两个库集合为一个使用。
- 登录制品库
- 客户端配置 vim /etc/docker/daemon.json 设置"insecure-registries":["172.30.57.181:8082"]
- 重启docker 登录 docker login 172.30.57.181:8082 服务IP:端口
// 出现这个401错误 将匿名登录取消
Error response from daemon: login attempt to http://172.30.57.181:8082/v2/ failed with status: 401 Unauthorized
- 推送镜像到制品库
- 使用docker push 推送一个本地镜像到远程制品库
- docker推送镜像时 必须开头带着镜像库的地址才可以推送 我们可以build生成 还可以使用docker tag给已有的镜像打标签
docker image ls -a
docker tag f98e5f96106f 172.30.57.181:8082/jenkins/jenkins
docker push 172.30.57.181:8082/jenkins/jenkins
Jenkins 构建前端镜像并上传到制品库
- jenkins登录认证制品库
// 这里会提示没有docker 有两种处理方式
// 1.安装docker 2.docker in docker使用宿主机的
docker exec -it jenkins /bin/bash
docker login 172.30.57.181:8082
- Nginx 服务器登录认证制品库
// 正好有两个 分别采用两种不同的方式 jenkins使用docker in docker的方式
// nginx之前使用的centos作为image 这里就安装docker
docker login 172.30.57.181:8082
- 使用 DockerFile 构建前端镜像
// 在代码中新建Dockerfile文件
FROM nginx
COPY dist /usr/share/nginx/html
WORKDIR /usr/share/nginx/html
- 修改执行脚本
set -e
timestamp=`date '+%Y%m%d%H%M%S'`
node -v
npm -v
npm install --registry=https://registry.npm.taobao.org
npm run build
# 编译docker镜像
docker build -t 172.30.57.181:8082/fe/nginx-fe-$timestamp .
# 推送docker镜像到制品库
docker push 172.30.57.181:8082/fe/nginx-fe-$timestamp
# 远程执行命令部署镜像 nginx服务器中拉取我们部署的镜像
ssh -o StrictHostKeyChecking=no root@172.30.57.181 "docker pull 172.30.57.181:8082/fe/nginx-fe-$timestamp && \
docker stop jenkins-test && \
docker rm jenkins-test && \
docker run -p 9999:80 -itd \
--name jenkins-test \
--restart always \
172.30.57.181:8082/fe/nginx-fe-$timestamp"
解决 bash: docker: command not found
- docker in docker 使用宿主机
// docker run ... -v /var/run/docker.sock:/var/run/docker.sock
- 使用dockerfile构建 解决依赖问题
FROM jenkins/jenkins
USER root
# 清除了基础镜像设置的源,切换成阿里云源
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \
&& echo "deb http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
&& echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list
# 更新源并安装缺少的包
RUN apt-get update && apt-get install -y libltdl7
ARG dockerGid=999
RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group
- 构建 docker build -t local/jenkins .
- 启动
docker run -itd --name jenkins -p 8080:8080 -p 60000:60000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/local/bin/docker:/usr/bin/docker \
-v ~/jenkins:/var/jenkins_home \
--restart always \
local/jenkins
- 安装docker
- 启动docker容器(实际上是一个服务器)
// 加上privileged=true来解决无法使用 systemctl 命令
docker run -itd \
-p 8080:8080 \
-p 50000:50000 \
--name nginx \
--restart always \
-v jenkins_home:/var/jenkins_home \
--privileged=true \
centos /usr/sbin/init
- 安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
// package docker-ce-3:20.10.1-3.el7.x86_64 requires containerd.io >= 1.4.1, but none of the providers can be installed
// 默认使用podman代替docker,所以需要containerd.io 版本要求高 或者安装指定低版本的docker
yum install https://download.docker.com/linux/centos/8/x86_64/stable/Packages/containerd.io-1.4.3-3.1.el8.x86_64.rpm
yum install -y docker-ce docker-ce-cli containerd.io
docker -v
systemctl start docker
- 错误System has not been booted with systemd as init system (PID 1). Can't operate.
在docker run的时候要加上--privileged=true
- 在centos安装jenkins
yum install -y java
// 最好是使用国内镜像下载 wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.263.1-1.1.noarch.rpm
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
yum install -y jenkins
// 端口8080
vi /etc/sysconfig/jenkins
systemctl start jenkins
// 访问 http://172.30.57.181:8080/
Ansible
- 我们可以使用Ansible来实现批量部署发布
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!