Jenkins 实战

概述

Java 编写的最广泛使用的开源持续集成工具 & 广泛的第三方插件支持 & 分布式构建

自动化

正常开发流程

  1. 开发
  2. 提交代码
  3. CI运行自动化测试
  4. 点击按钮进行部署

上线后出问题

点击按钮进行回滚

war包安装 Jenkins

  1. 简单方便
  2. 和服务器环境绑定
  • 需要配置服务
  • 运行的构建命令直接使用服务器的命令

Docker 安装 Jenkins

  1. 运行在容器中,无法直接调用宿主机的命令
  2. 和服务器环境隔离

如何排查问题

  • 看日志
  • 查看 Jenkins 的构建目录
  • Docker 版的 Jenkins,想清楚问题发生在哪里

手工创建任务

指定一个任务的详细步骤

  • 优点 => 简单方便
  • 缺点 => 重复 & 构建过程没有被版本控制

Jenkinsfile 创建任务

使用代码指定任务要如何运行

  • 优点 => 构建过程也被版本控制起来,方便回滚
  • 缺点 => 稍显麻烦

搭建 Jenkins

前期准备

  1. 任何的一个项目 => 此项目中有 Dockerfile 和 Jenkinsfile,用于相关配置
  2. 两台服务器
    1. 服务器A(大陆):用于上线你的应用以及搭建docker私服
    2. 服务器B(香港):用于搭建Jenkins。代码放置在 Github 上,大陆服务器 pull 不下来
    3. :临时服务器可以购买按流量收费的,速度快又便宜

服务器设置

服务器B

Server HongKong
  1. 主IPv4公网IP: 43.132.196.139
  2. 打开 8080 端口,用于访问 Jenkins
  3. 生成 ssh key

服务器A

Server
  1. 主IPv4公网IP: 118.195.243.156
  2. 打开 8080 端口,用于访问 Jenkins
  3. 打开 5000 端口,用于访问 docker 私服
  4. 打开 8080 端口,用于访问服务
  5. 将服务器B的公钥绑定服务器,用于服务器B可以登录服务器A
  6. 配置 docker => docker 可以拉取私服镜像
    1. vi /etc/docker/daemon.json
    2. {
         "insecure-registries" : ["http://118.195.243.156:5000"]
      }
      

搭建 docker 私服

  1. 登录服务器A
  2. 安装 Docker
    1. 例:Install On Centos => 推荐查看 官方文档 安装
    2. yum install -y yum-utils
    3. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    4. yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    5. yum install docker-ce-20.10.9 docker-ce-cli-20.10.9 containerd.io docker-compose-plugin
    6. systemctl start docker
  3. docker pull registry
  4. docker run -d -p 5000:5000 --restart always --name registry registry:2
  5. 访问 http://118.195.243.156:5000/v2/,如果看到 { } 即成功

搭建 Jenkins

  1. 登录服务器B
  2. 安装 Docker
    1. 例:Install On Centos => 推荐查看 官方文档 安装
    2. yum install -y yum-utils
    3. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    4. yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    5. yum install docker-ce-20.10.9 docker-ce-cli-20.10.9 containerd.io docker-compose-plugin
    6. systemctl start docker
  3. 安装 Jenkins
    1. 推荐查看 官方文档 安装
    2. docker network create jenkins
    3. docker run --name jenkins-docker --rm --detach --privileged --network jenkins --network-alias docker -e DOCKER_TLS_CERTDIR=/certs -v jenkins-docker-certs:/certs/client -v jenkins-data:/var/jenkins_home -p 2376:2376 docker:dind --storage-driver overlay2 --insecure-registry=118.195.243.156:5000
    4. mkdir jenkins
    5. cd jenkins && touch Dockerfile
    6. vi Dockerfile
    7. 将下面的内容粘贴到 Dockerfile
    FROM jenkins/jenkins:2.332.3-jdk11
    USER root
    RUN apt-get update && apt-get install -y lsb-release
    RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
    https://download.docker.com/linux/debian/gpg
    RUN echo "deb [arch=$(dpkg --print-architecture) \
    signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
    https://download.docker.com/linux/debian \
    $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
    RUN apt-get update && apt-get install -y docker-ce-cli
    USER jenkins
    RUN jenkins-plugin-cli --plugins "blueocean:1.25.3 docker-workflow:1.28"
    
    1. docker build -t myjenkins-blueocean:2.332.3-1 .
    2. docker run --name jenkins-blueocean --restart=on-failure --detach --network jenkins --env DOCKER_HOST=tcp://docker:2376 -e DOCKER_CERT_PATH=/certs/client -e DOCKER_TLS_VERIFY=1 -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home -v jenkins-docker-certs:/certs/client:ro myjenkins-blueocean:2.332.3-1
  4. 获取 admin 账号的密码 => docker logs jenkins-blueocean 或者进入 Jenkins Container(docker exec -it jenkins-blueocean sh + cat /var/jenkins_home/secrets/initialAdminPassword)
    [图片上传失败...(image-b02924-1654689659890)]
  5. 打开网址 http://<服务器B ip>:8080 => http://43.132.196.139:8080,即可看到 Jenkins,输入账号密码后会进入选择插件页面,关闭即可。
    Jenkins Init
  6. 安装插件 => Manage Jenkins > Manage Plugins > Available
    1. SSH Agent => 用于登录其他服务器
    2. Pipeline Utility Steps => 用于使用一些插件 ,如 zip
  7. 配置 Global credentials => Manage Jenkins > Manage Credentials
    1. 添加一个类型为 Username with password 的 credential。用于拉取代码。其中的 password,可以从 GitHub 的 Access Token 中获取
      GitHub Access Token

      Username & Password credential
    2. 添加一个类型为 SSH Username with private key 的 credential。用于登录其他服务器,可是使用服务器B生成的 ssh 私钥
      SSH Username with private key credential
    3. 结果如下图


      Credentials
  8. 添加项目,多流水分支线,之后选择从 GitHub 中获取源代码,之后选择 credential 和填写 url


    Create a job

    Job

    Scan
  9. 扫描


    Scan
  10. build 即可
  11. deploy 时需要同意一些脚本的运行


    deploy error

    approve
  12. 如果 build 时遇到了以下错误。解决方法:进行 docker volume 映射,即在启动 myjenkins-blueocean 时添加 -v $(which docker):/usr/bin/docker,你需要删除所有的 docker container,并删除相关数据(docker volume rm jenkins-data + docker volume rm jenkins-docker-certs)
    docker not found
  13. 如果遇到这个错误,那就是没有将服务器B的公钥绑定到服务器A上了


    Permission denied
  14. 如果遇到下面这个错误,那就是没有在服务器A上配置 docker。配置之后重启docker => systemctl enable docker
    Error
  15. 成功之后可以访问 http://118.195.243.156:8080/test
    Hello World

知识点

  1. 灰度测试
  2. A/B测试
  3. 如果服务器在大陆,可以添加 jenkins
    镜像仓库:https://gitlab.com/jenkins-zh/update-center-mirror/raw/master/tsinghua/current/update-center.json
  4. 持续集成 => Continuous Integration => 运行 mvn test 跑自动化测试
  5. 查看docker私服所有的镜像 => http://<IP>:5000/v2/_catalog
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容