Jenkins持续交付

什么是 Jenkins

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dUcxClu3-1585931334593)(Jenkins持续交付/jenkins_logo.png)]

Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

官方网站:https://jenkins.io/

基于 Docker 安装 Jenkins

docker-compose

Jenkins 是一个简单易用的持续集成软件平台,我们依然采用 Docker 的方式部署,docker-compose.yml 配置文件如下:

version: '3.1'
services:
  jenkins:
    restart: always
    image: jenkinsci/jenkins
    container_name: jenkins
    ports:
      # 发布端口
      - 8080:8080
      # 基于 JNLP 的 Jenkins 代理通过 TCP 端口 50000 与 Jenkins master 进行通信
      - 50000:50000
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./data:/var/jenkins_home

安装过程中会出现 Docker 数据卷 权限问题,用以下命令解决:

chown -R 1000 /usr/local/docker/jenkins/data

解锁 Jenkins

Jenkins 第一次启动时需要输入一个初始密码用以解锁安装流程,使用 docker logs jenkins 即可方便的查看到初始密码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-irwGBKiU-1585931334594)(Jenkins持续交付/Lusifer_20181029010826-1585560671995.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2rANG5dF-1585931334594)(Jenkins持续交付/Lusifer_20181029010853-1585560672114.png)]

注意: 安装时可能会因为网速等原因导致安装时间比较长,请大家耐心等待。如果长时间停留在安装页没反应,请尝试使用 F5 刷新一下。

使用自定义插件的方式安装

插件是 Jenkins 的核心,其丰富的插件(共有77350` 个插件)可以满足不同人群的不同需求

插件地址:https://plugins.jenkins.io/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-waYJbH84-1585931334595)(Jenkins持续交付/Lusifer_20181029012228-1585560672115.png)]

注意: 除了默认勾选的插件外,一定要勾选 Publish over SSH 插件,这是我们实现持续交付的重点插件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RwHteGFi-1585931334596)(Jenkins持续交付/Lusifer_20181029013023-1585560672114.png)]

开始安装了,根据网络情况,安装时间可能会比较长,请耐心等待

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FK3aOzIT-1585931334596)(Jenkins持续交付/Lusifer_20181029013257-1585560672116.png)]

很多插件装不上怎么办?不要慌,记住这些插件的名字,咱们稍后可以手动安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i2iMTRfM-1585931334597)(Jenkins持续交付/Lusifer_20181029013529-1585560762418.png)]

安装成功效果图

  • 创建管理员

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Aa8u3aSj-1585931334597)(Jenkins持续交付/Lusifer_20181029014606-1585560672111.png)]

  • 安装完成,进入首页

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fLB8SCO3-1585931334598)(Jenkins持续交付/Lusifer_20181029014814-1585560672087.png)]

Jenkins 手动安装插件

使用插件管理器安装

  • Manage Jenkins -> Manage Plugins -> Avaliable

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cXhUTDY1-1585931334598)(Jenkins持续交付/Lusifer_20181029015721-1585560672112.png)]

  • 过滤出想要安装的插件,然后点击 Download now and install after restart

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f64Cc1Ok-1585931334599)(Jenkins持续交付/Lusifer_20181029015918-1585560672113.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hfhzC0Cj-1585931334600)(Jenkins持续交付/Lusifer_20181029020240-1585560672111.png)]

手动上传 .hpi 文件

  • 点击进入插件中心

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cNqe8fh6-1585931334601)(Jenkins持续交付/Lusifer_20181029021411-1585560814107.png)]

  • 点击 Archives

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GDJxkzQ6-1585931334601)(Jenkins持续交付/Lusifer_20181029021906-1585560914592.png)]

  • 下载需要的版本
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZwT37YKg-1585931334602)(Jenkins持续交付/Lusifer_20181029022059-1585560898505.png)]
  • 在插件管理器中选择 Advanced

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LFLAZOCC-1585931334602)(Jenkins持续交付/Lusifer_20181029022309-1585560883066.png)]

  • 选择上传即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3aD4z8ck-1585931334603)(Jenkins持续交付/Lusifer_20181029022410-1585560865130.png)]

重启 Jenkins

docker-compose down
docker-compose up -d

注意: 请留意需要下载插件的警告信息,如果不满足安装条件,Jenkins 是会拒绝安装的。如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7YdkCbRb-1585931334604)(Jenkins持续交付/Lusifer_20181029021640-1585560849814.png)]

配置 Jenkins

配置 JDK & Maven

  • 上传 JDK 和 Maven 的 tar 包到服务器(容器数据卷目录)
  • Manage Jenkins -> Global Tool Configuration
  • 安装 JDK(JAVA_HOME 的路径是宿主机目录,切记!不明白的看视频!
/var/jenkins_home/jdk1.8.0_152

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6APeNy1h-1585931334604)(Jenkins持续交付/Lusifer_20181029023809.png)]

  • 安装 Maven(MAVEN_HOME 的路径是宿主机目录,切记!不明白的看视频!
/var/jenkins_home/apache-maven-3.5.3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-flZlUKnZ-1585931334605)(Jenkins持续交付/Lusifer_20181029024653.png)]

  • 别忘记保存

配置本地化(显示中文)

  • 安装 Locale 插件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PSWyHWQe-1585931334605)(Jenkins持续交付/Lusifer_20181029032817.png)]

  • Manage Jenkins -> Configure System -> Locale

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dbuhY89l-1585931334605)(Jenkins持续交付/Lusifer_20181029033127.png)]

  • 本地化效果图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5e3NpXh5-1585931334606)(Jenkins持续交付/Lusifer_20181029042305.png)]

安装动态参数插件

该插件的主要目的是为了方便我们后面在做项目构建时可以按照版本进行构建(支持一键回滚哦)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9o0GLMjX-1585931334606)(Jenkins持续交付/Lusifer_20181029050930.png)]

持续交付实战用户管理服务

写在前面

Jenkins 的持续交付流程与 GitLab Runner 的持续集成差不多,但 GitLab Runner 已经默认是配置好了 Git,所以 Jenkins 需要额外配置多一个 GitLab 的 SSH 登录。Jenkins 的持续交付流程大致如下:

  • 拉取代码(GitLab)
  • 打包构建(Nexus)
  • 上传镜像(Registry)
  • 运行容器(Docker)
  • 维护清理

配置 Jenkins 的 GitLab SSH 免密登录

步骤同 使用 SSH 的方式拉取和推送项目

  • 交互式进入 Jenkins 容器
docker exec -it jenkins /bin/bash
  • 生成 SSH KEY
ssh-keygen -t rsa -C "[email protected]"
  • 查看公钥
cat /var/jenkins_home/.ssh/id_rsa.pub
  • 复制公钥到 GitLab

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ORG4nrYW-1585931334607)(Jenkins持续交付/Lusifer_20181029040829-1585733860941.png)]

  • 手动克隆一次项目,该步骤的主要作用是为了生成和服务器的验证信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fogRnagr-1585931334607)(Jenkins持续交付/Lusifer_20181029040629-1585733861143.png)]

  • 查看刚才生成的文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vtQ8OOVa-1585931334607)(Jenkins持续交付/Lusifer_20181029040917-1585733861329.png)]

配置 Publish over SSH

  • 系统管理 -> 系统设置 -> Publish over SSH

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LMNCuX6X-1585931334608)(Jenkins持续交付/Lusifer_20181029042448-1585733886979.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vS2Mn4AV-1585931334608)(Jenkins持续交付/Lusifer_20181029042803-1585733887649.png)]

其中 Remote Directory 是指 Jenkins 可以在目标服务器操作的目录

  • 测试是否能够正常通信

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J3BMguxC-1585931334609)(Jenkins持续交付/Lusifer_20181029042948-1585733888383.png)]

  • 别忘记保存

持续交付依赖管理项目

由于我们所有项目的父工程都是依赖于 myshop-dependencies,所以我们的第一步是实现该项目的持续交付

为项目创建标签

在 GitLab 中为项目创建标签

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BAkATvzn-1585931334609)(Jenkins持续交付/Lusifer_20181029033939-1585733960853.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4mao7yTK-1585931334610)(Jenkins持续交付/Lusifer_20181029034014-1585733961623.png)]

创建 Maven Project

在 Jenkins 中创建一个基于 Maven 的任务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gdeu33St-1585931334610)(Jenkins持续交付/Lusifer_20181029031827-1585733972283.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8eY1bBBN-1585931334611)(Jenkins持续交付/Lusifer_20181029032145-1585733972631.png)]

配置 Maven Project

配置第一次构建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bltgkrEE-1585931334611)(Jenkins持续交付/Lusifer_20181029053458-1585733999143.png)]

  • 构建项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EsSJ0b4m-1585931334611)(Jenkins持续交付/Lusifer_20181029044458-1585733999323.png)]

  • 查看构建日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TLGoK0b8-1585931334612)(Jenkins持续交付/Lusifer_20181029045327-1585733999529.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FjFxtGL6-1585931334612)(Jenkins持续交付/Lusifer_20181029053826-1585733999529.png)]

配置正式构建

  • 增加参数化构建过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FISbZeUJ-1585931334613)(Jenkins持续交付/Lusifer_20181029051942-1585734049671.png)]

这里使用了 Groovy 脚本来查询最近的 tags 版本,代码如下:

def ver_keys = [ 'bash', '-c', 'cd /var/jenkins_home/workspace/myshop-dependencies;git pull>/dev/null; git remote prune origin >/dev/null; git tag -l|sort -r |head -10 ' ]
ver_keys.execute().text.tokenize('\n')
  • 关闭源码管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C89Ro5RS-1585931334614)(Jenkins持续交付/Lusifer_20181029052233-1585734049824.png)]

  • 增加构建步骤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7dPjVNfk-1585931334614)(Jenkins持续交付/Lusifer_20181029052318-1585734049940.png)]

echo $RELEASE_VERSION
cd /var/jenkins_home/workspace/myshop-dependencies
git checkout $RELEASE_VERSION
git pull origin $RELEASE_VERSION
mvn clean package
  • 使用参数化构建项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-txaZa0Vn-1585931334615)(Jenkins持续交付/Lusifer_20181029052413-1585734050017.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B8s2j3uc-1585931334615)(Jenkins持续交付/Lusifer_20181029052453-1585734050017.png)]

  • 查看构建日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zl5jwWM0-1585931334615)(Jenkins持续交付/Lusifer_20181029052538-1585734069354.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kByVGQ5L-1585931334616)(Jenkins持续交付/Lusifer_20181029054240-1585734069489.png)]

持续交付用户服务提供者

在 Jenkins 中创建一个基于 Maven 的任务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K8dS2Vyt-1585931334616)(Jenkins持续交付/Lusifer_20181030063447-1585734069489.png)]

配置 Maven Project

配置第一次构建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zeHNfutb-1585931334617)(Jenkins持续交付/Lusifer_20181030063703-1585734069489.png)]

  • 构建项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YTz7PNBK-1585931334617)(Jenkins持续交付/Lusifer_20181030063834-1585734069489.png)]

  • 查看构建日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-39EGOWj3-1585931334617)(Jenkins持续交付/Lusifer_20181030064122-1585734069490.png)]

配置正式构建

  • 增加参数化构建过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-irXrmrh1-1585931334618)(Jenkins持续交付/Lusifer_20181030064556-1585734069490.png)]

这里使用了 Groovy 脚本来查询最近的 tags 版本,代码如下:

def ver_keys = [ 'bash', '-c', 'cd /var/jenkins_home/workspace/myshop-service-user-provider;git pull>/dev/null; git remote prune origin >/dev/null; git tag -l|sort -r |head -10 ' ]
ver_keys.execute().text.tokenize('\n')
  • 关闭源码管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EJYJdzn0-1585931334618)(Jenkins持续交付/Lusifer_20181029052233-1585734069490.png)]

  • 增加构建步骤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AeR8NLWt-1585931334618)(Jenkins持续交付/Lusifer_20181030071141-1585734069490.png)]

  • Execute Shell(本地执行 Shell 脚本)
echo $RELEASE_VERSION
cd /var/jenkins_home/workspace/myshop-service-user-provider
git checkout $RELEASE_VERSION
git pull origin $RELEASE_VERSION
mvn clean package

Send files or execute commands over SSH(发送文件或执行远程命令)

  • Source files:需要传输到远程目标服务器的文件
`**/*.jar,docker/**`
  • Remove prefix:删除前缀。比如传输 **/*.jar,我们打包的 .jar 文件是在 target 目录下的,传输时会一并创建 target 目录,如果不希望创建 target 目录,则可以使用该参数屏蔽掉这些前缀文件夹。
  • Remote directory:在远程目标服务器创建操作目录
myshop-service-user-provider
  • Exec command:在远程目标服务器执行控制台命令
cd /usr/local/jenkins/myshop-service-user-provider
cp target/myshop-service-user-provider-1.0.0-SNAPSHOT.jar docker
cd docker
docker build -t 192.168.10.133:5000/myshop-service-user-provider:v1.0.0 .
docker push 192.168.10.133:5000/myshop-service-user-provider:v1.0.0
docker-compose down
docker-compose up -d
docker image prune -f
  • 使用参数化构建项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bhe0rlV7-1585931334619)(Jenkins持续交付/Lusifer_20181030073005-1585734100935.png)]

  • 查看构建日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dOp6d5yz-1585931334619)(Jenkins持续交付/Lusifer_20181030073032-1585734101032.png)]

持续交付用户服务消费者

操作步骤同上

你可能感兴趣的:(Jenkins持续交付)