最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Jenkins + nexus 实现前端构建

    正文概述 掘金(dream_99517)   2021-01-06   1040

    前端构建

    1. 在 Jenkins + Gitlab 实现前端构建 中简单实现了gitlab+jenkins的自动化部署 现在增加nexus
    2. 之前的流程为jenkins拉取gitlab代码 ==> build打包压缩资源 ==> 通过scp上传压缩包 ==> ssh远程执行解压部署 ==> 访问nginx服务器
    3. 引入nexus之后替换为 Dockerfile构建镜像 ==> 上传镜像到制品库 => 远程执行命令拉取镜像,停止容器,删除容器,启动新拉取的镜像

    Nexus制品库

    1. 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
    
    1. 访问 http://172.30.57.181:8081/ (初始会很慢可以使用docker logs -f nexus查看进度)

    Jenkins + nexus 实现前端构建

    1. 登录docker exec -it nexus /bin/bash cat /nexus-data/admin.password获取初始密码 (查看的时候 这里可能没换行) 修改密码 admin admin
    2. 创建一个docker私服
    • Create repository 选择docker hosted类型 加上配置的http端口
    • http://172.30.57.181:8081/:8081/repository/docker/
    • proxy: 此类型制品库原则上 只下载,不允许用户推送 可以理解为缓存外网制品的制品库。缓存
    • hosted:此类型制品库和proxy相反,原则上 只允许用户推送,不允许缓存 这是私有库的核心 只存放自己的私有镜像或制品
    • group:此类型制品库用作以上两种类型的集合,将上面两个库集合为一个使用。

    Jenkins + nexus 实现前端构建

    1. 登录制品库
    • 客户端配置 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
    

    Jenkins + nexus 实现前端构建

    1. 推送镜像到制品库
    • 使用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 + nexus 实现前端构建 Jenkins + nexus 实现前端构建

    Jenkins 构建前端镜像并上传到制品库

    1. jenkins登录认证制品库
    // 这里会提示没有docker 有两种处理方式
    // 1.安装docker 2.docker in docker使用宿主机的 
    docker exec -it jenkins /bin/bash
    docker login 172.30.57.181:8082
    
    1. Nginx 服务器登录认证制品库
    // 正好有两个 分别采用两种不同的方式 jenkins使用docker in docker的方式
    // nginx之前使用的centos作为image 这里就安装docker
    docker login 172.30.57.181:8082
    
    1. 使用 DockerFile 构建前端镜像
     // 在代码中新建Dockerfile文件
    FROM nginx
    COPY dist /usr/share/nginx/html
    WORKDIR /usr/share/nginx/html
    
    1. 修改执行脚本
    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"
    

    Jenkins + nexus 实现前端构建

    解决 bash: docker: command not found

    1. 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
    
    1. 安装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来实现批量部署发布

    起源地下载网 » Jenkins + nexus 实现前端构建

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元