Gitlab+Jenkins实现CICD

手工打包上传,解压启动的过程速度慢,过于繁琐,借助于Jenkins,可以实现自动编译打包部署。

安装Jenkins

直接从官网https://jenkins.io/zh/download/下载最新的war包,然后解压到某个固定目录,使用java -jar jenkins.war启动即可,默认它会将war包解压到~/.jenkins目录下,并生成一些目录及配置文件。或:

  • 后台启动
    nohup java -jar jenkins.war &
  • 更多参数
    /opt/jdk1.8.0_181/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8082 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20

上面笔者的实例设置了jenkins_home,日志位置,后台运行,以及端口。
更多安装请参考自动部署Jenkins使用教程

新建项目

点击新建任务 --> 输入任务名称 --> 构建一个自由风格的软件项目
Gitlab+Jenkins实现CICD_第1张图片
下面我会介绍必不可少的配置项:

源码管理

第一步告诉jenkins源码位置,便于jenkins拉取代码,进行编译打包
Gitlab+Jenkins实现CICD_第2张图片
如果我们代码托管在gitlab或github,选择git:

Repository URL: 项目git地址
Credentials: 登录gitlab或github的账户,首次设置点击添加,输入用户名密码后刷新页面(刷新之前需要保存当前配置,避免丢失)
Branches tp build: 代码分支
源码库浏览器: 如果设置则可以在jenkins中查看代码修改详细信息,笔者源码托管在gitlab上,所以选择gitlab,然后下面URL和Version分别是gitlab的地址和版本

触发器

告诉jenkins何时进行代码拉取、编译打包?可以选择定时,或者轮训SCM,当有commit时,自动触发,笔者这里选择就是轮训SCM
Gitlab+Jenkins实现CICD_第3张图片

构建

告诉jenkins如何编译、打包源码?笔者选择使用maven进行编译,打包使用assembly插件,具体配置在maven的pom.xml。

Gitlab+Jenkins实现CICD_第4张图片
如上图,笔者配置了两个不同的构建步骤:

  • 调用顶层Maven目标
    首先使用maven进行编译、打包,这里不用mvn命令,只输入clean package

  • 执行shell
    然后使用scp命令将打包好的tar.gz压缩包上传到目标机器,然后解压,启动等。
    需要在目标机器执行命令,则可以在上面命令窗口编辑,比如ssh到远程机器,然后执行若干命令:

    ssh test@ip << remote_
    # 省略
    exit;
    remote_
    

    这里会涉及免密登录目标机器的配置,有两种方案:

    1. 用启动jenkins的那个用户,使用ssh-keygen -t rsa命令生成秘钥对,然后手工将jenkins机器的公钥id_rsa.pub内容拷贝到目标机器的对应用户authorized_keys文件中。具体原理可参考:Gitlab+Jenkins实现CICD_第5张图片
    2. 借助jenkins的插件publish-over-ssh进行免密登录远程主机,并传送文件,该插件的配置可以参考:
      Gitlab+Jenkins实现CICD_第6张图片
    构建后

    一切完成之后,需要清理编译打包生成的临时文件
    Gitlab+Jenkins实现CICD_第7张图片
    OK,一个基本的CICD配置完成,笔者实践时也是走了一些弯路,希望对大家有用。

你可能感兴趣的:(CICD)