搭建 jenkins(Gitee+Node+Maven+Docker+Deploy)

1,175 阅读7分钟

搭建 jenkins

  • 拉取 jenkins 镜像

    执行以下命令拉取镜像(以 2.433-jdk17 版本为例):

    docker pull jenkins/jenkins:2.433-jdk17
    

    需要注意的是 jenkins 最新镜像是 jenkins/jenkins,而不是 jenkins:

  • 运行 jenkins 镜像

    执行以下命令拉取镜像(以 2.433-jdk17 版本为例):

    //var/jenkins/jenkins-data为本机某个目录
    //外网访问端口设置为18080
    docker run \
    -d \
    --name jenkins \
    --rm \
    -u root \
    -p 18080:8080 \
    -v /var/jenkins/jenkins-data:/var/jenkins_home \
    jenkins/jenkins:2.433-jdk17
    

    或者通过 docker-compose 启动,以下是 docker-compose.yml 文件:

    #docker-compose.yml
    version: "3"
    services:
      jenkins:
        image: jenkins/jenkins:2.433-jdk17
        container_name: jenkins
        user: root
        ports:
          - "18080:8080"
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - /var/jenkins/jenkins-data:/var/jenkins_home
    

    执行docker-compose up -d命令启动。

  • 浏览器访问 18080 端口

    加载可能需要一些时间,完成后会出现下图的界面:

    执行以下命令获取管理员密码:

    docker exec jenkins bash -c "cat /var/jenkins_home/secrets/initialAdminPassword"
    =>d1bc30kecf304f1489423a2c74b2b59e
    

    填入管理员密码后继续,等待片刻后,安装推荐的插件。

  • 安装推荐的插件

    部分插件可能安装失败,安装失败后可尝试重试安装。安装完成后会进入到管理员账户的创建页面。

  • 创建管理员账户

    创建用户后会进入到示例配置页面。

  • 示例配置

    点击保存后,就能进入 jenkins 操作界面了:

    但是最好重启下容器(有些插件重启才会生效),执行以下命令:

    docker restart jenkins
    

配置 Node 环境

  • 安装 Node 插件

    重启容器后访问 18080 端口,登录后就能进入 jenkins 主页了。进入主页后选择系统管理=>插件管理:

    在 Avaliable plugins 中搜索 nodejs,点击安装: 安装完成后重启容器。

  • 配置 Node

    重启完成后,在 jenkins 主页选择系统管理=>全局工具配置: node 版本选择的与开发环境一致,需预装 yarn(前端项目用 yarn 做包管理工具) 包管理工具。

    安装 yarn 的 npm 镜像源可以配置成淘宝:

    --registry=https://registry.npm.taobao.org yarn
    

配置 Gitee

  • 配置 Gitee 登录凭证

    在 jenkins docker 运行所在的服务器上生成 ssh key(如果有则不需要重新生成),执行命令:

    ssh-keygen -t rsa
    

    将公钥 id_rsa.pub 的内容拷贝到 Gitee 设置页面 SSH 公钥配置当中:

  • 在 jenkins 中添加凭证

    在 jenkins 主页选择系统管理=>凭据=>系统(system)=>全局凭据: 下图中,用户名为 docker 运行的用户,Private Key 为上一步生成的 id_rsa 的内容。 点击 Create 创建生成凭证。

创建流水线

在创建流水线前先安装 Git Parameter 插件(为了支持配置 Git 参数),在 jenkins 主页选择系统管理=>插件管理,在 Avaliable plugins 中搜索 Git Parameter plugin,点击安装,安装完成后重启容器。完成后进行以下操作:

  • 创建文件夹

    为了方便管理,先创建一个文件夹(在 jenkins 主页选择新建任务),名为 multi-body:

  • 添加自由风格项目

    在上一步中创建的 multi-body 文件中选择新建 Item,创建一个自由风格的软件项目名为 micro-simulation:

  • 添加编译配置

    在上一步创建的 micro-simulation 项目中选择配置:

    • 配置参数

      为了构建时可以手动选择不同的分支进行编译,在参数化构建过程中选择添加 Git 参数:

    • 配置源码管理

      URL 填写 Gitee 上项目的 ssh 地址,Credentials 选前述生成的凭证(gitee-ssh),分支填写上一步配置的名字(BRANCH_NAME):

    • 配置 Node 环境

    • 配置 build 命令

      yarn  //安装node_modules
      yarn build //执行build命令,build完后会在项目根目录生成rand-batch文件夹
      tar -czf rand-batch.tar.gz rand-batch
      

    • 归档上一步生成的 tar 文件

      下图中用于存档的文件目录是相对于项目根目录,归档后就能生成该 tar 文件的下载链接。

  • 开始构建

    上一步配置完成后,就可以开始根据配置文件构建项目了:

  • 查看构建结果

    构建完成后就能看到最后生成的 tar 文件了,点击可以下载。

    此外,对于构建的相关信息都可以点击构建序列号进行查看:

通过以上步骤,就能通过 jenkens 构建在 gitee 上的前端项目了。

部署

  • 安装 Publish Over SSH 插件

    jenkins 主页选择系统管理=>插件管理,在 Avaliable plugins 中搜索 Publish Over SSH,点击安装: 安装完成后重启容器。

  • 目标服务器生成密钥

    在需要部署的目标服务器生成密钥(如果有则不需要重新生成),执行命令:

    ssh-keygen -t rsa
    

    将公钥放到 authorized_keys,执行命令:

    cat id_rsa.pub >> authorized_keys
    
  • 配置 Publish Over SSH 插件

    重启完成后在系统管理=>系统配置会多出一个 Publish over SSH:

    下图中,Key 填入上一步生成的私钥 id_rsa 的内容,Name 随意起一个目标服务器的名称,Hostname 为目标服务器 IP,Username 为链接目标服务的用户名, 可以点击右下角的 Test Configution 进行连通性测试。

  • 添加构建后操作步骤 Send build artifacts over SSH

    进入项目配置页面,添加构建后操作步骤 Send build artifacts over SSH: Name 选择上一步配置好 ssh server,Source files 文件是相对于工作区,Remote directory 目录是相对于用户 ssh 登录默认目录,比如用户是 abc,ssh 默认登录目录可能是/home/abc,则最后上传的目录是/home/abc/www/packages,Exec command 就是登录到目标服务器后要执行的脚本,这里主要是将 tar 文件解压到目标目录。

自此就能够一键构建并部署项目了。

通过 docker 进行编译

有时候我们编译一个项目,需要安装很多依赖,比如编译 c++项目,可能需要安装 g++、cmake 等环境,而其他项目又可能需要其他环境,这时候配置 Jenkins 编译的同学就需要知道各个项目的上下文,编译方式等,这样就太过麻烦。假如各个项目的同学直接提供一个编译自己项目的 docker 镜像,那么配置 Jenkins 的同学只需要提供一个简单的配置模板就可以了。

假设编译项目的镜像已预先生成好并推送到镜像仓库 harbor(这里是私有部署的镜像仓库 192.168.30.32:18082),镜像名为192.168.30.32:18082/library/semd-builder:0.0.1,接下来我们首先需要在 jenkins 里能执行 docker 命令:

  • 支持执行脚本时能够访问 docker 命令

    在执行脚本时能够访问 docker 命令,即在 docker 容器内部执行 docker 命令,首先需要在 jenkins 容器内安装 Docker 客户端:

    apt-get update && apt-get install -y docker.io
    

    容器内安装好客户端后,在启动容器时需要映射 docker.sock:

    //docker-compose.yml
    version: '3'
    services:
    jenkins:
      image: jenkins/jenkins:2.433-jdk17
      container_name: jenkins
      user: root
      ports:
        - "18080:8080"
      volumes:
        - /var/run/docker.sock:/var/run/docker.sock
        - /var/jenkins/jenkins-data:/var/jenkins_home
    

    重启容器。

  • 配置 build 命令

    在 Build Steps 中添加执行 shell,运行 docker 就可以了。 下图中/var/jenkins/jenkins-data是我们运行 jenkins 时映射的/var/jenkins_home路径,$JOB_NAME在这里是multi-body/semd-build。 当运行 semd-build 镜像会执行内部的一个 build 脚本(生成镜像时已配置)。

支持编译 Java 项目

  • 安装 Maven Integration plugin 插件

    jenkins 主页选择系统管理=>插件管理,在 Avaliable plugins 中搜索 Maven Integration plugin,点击安装,安装完成后重启容器。

  • 配置 Maven

    重启完成后,在 jenkins 主页选择系统管理=>全局工具配置=>新增 Maven=>自动安装:

  • 创建 Maven 项目

    jenkins 主页选择新建任务=>构建一个 maven 项目:

  • 配置源码管理

    同上,只需要换成 Java 项目地址。

  • 配置 build 命令

    • Root POM

      pom.xml 文件相对于 workspace 的路径

    • Goals and options

      添加 Maven 命令比如: package、clean 等。

  • 归档上一步生成的 jar 文件

    同上,只需要修改生成的 jar 文件的地址。

这样就可以 build 一个 Java 项目了。