文章目录

  • 一、安装Jenkins
  • 二、Jenkins配置证书凭据
  • 1.创建账密凭据(GitLab私有项目)
  • 2.创建SSH凭据(GitLab公开项目)
  • 三、配置Jenkins源码
  • 四、构建
  • 1.Maven构建
  • 2.脚本构建
  • 1.与Web服务器进行免密登录
  • 1.Jenkins部署在CentOS中
  • 2.Jenkins部署在Docker中
  • 2.Jenkins服务器上编写同步脚本
  • 五、配置构建触发器
  • 1.Web hook方式
  • 1.Jenkins配置触发器
  • 2.GitLab配置触发器认证
  • 2.轮询方式
  • 六、GitLab配置Jenkins返回状态
  • 1.GitLab中生成Access Token
  • 2.Jenkins配置GitLab生成的Token
  • 七、构建后操作


一、安装Jenkins

由于内网环境安装Git插件,缺少很多依赖,所以把外网环境下Jenkins安装好插件的plugins复制到内网。

  • 上传插件包
scp /Users/adam/Downloads/soft/docker_soft/soft/plugins.zip root@192.168.x.x:/root
  • 创建用户(本文用root)
sudo groupadd jenkins
# 创建jenkins用户,创建用户主目录,指定用户默认shell
sudo useradd -g jenkins -d /home/jenkins -m -s /bin/bash jenkins 
# 给jenkins用户使用sudo的权限
sudo echo "jenkins ALL=(ALL:ALL) ALL" >> /etc/sudoers 
# 给jenkins用户指定密码
sudo passwd jenkins
  • 安装配置
# 本地到处镜像
docker save jenkins > /Users/adam/Downloads/soft/docker_soft/soft/jenkins.tar.gz
# 上传Jenkins镜像
scp /Users/adam/Downloads/soft/docker_soft/soft/jenkins.tar.gz adam@192.168.x.x:/root
# 登录服务器
ssh adam@192.168.x.x
# 服务器导入镜像
docker load < /root/jenkins.tar.gz
# 使用root用户启动镜像
docker run -d -p 8080:8080 --name jenkins --restart always --privileged=true  -v /root/jenkins/config:/var/jenkins_home -u root jenkins/jenkins
  • 替换插件包
# 插件:Gitlab Plugin 
scp /Users/adam/Downloads/soft/docker_soft/Jenkins/plugins.zip root@192.168.x.x:jenkins/config
unzip plugins.zip
# 必须重启容器
  • 日志
docker logs -f jenkins
  • 访问
http://192.168.x.x:8080
  • 配置
  • 新建一个Freestyle项目
  • 丢弃旧的构建,保持7天
  • 选择Shell构建
# 查看当前执行shell的用户
whoami

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_gitlab

  • 立即构建(蓝色:正常;红色:异常)
  • 点击构建结果,查看控制台

二、Jenkins配置证书凭据

GitLab私有项目不能使用SSH凭据,只能使用账密凭据

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_jenkins_02

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_tomcat_03

1.创建账密凭据(GitLab私有项目)

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_jenkins_04

2.创建SSH凭据(GitLab公开项目)
  • 生成公私钥对
# 生成密钥对
ssh-keygen -t rsa -f ~/.ssh/jenkins_rsa
# 私钥 - 添加到Jenkins
cat ~/.ssh/jenkins_rsa
# 公钥 - 添加到GitLab
cat ~/.ssh/jenkins_rsa.pub
  • Jenkins添加SSH私钥
  • GitLab添加SSH公钥

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_Jenkins_05

三、配置Jenkins源码

  • 选中工程 - 配置
  • 源码管理
  • 立即构建
  • 查看构建地址
cd /var/jenkins_home/workspace/first-test

四、构建

1.Maven构建

//TODO,外网很方便

2.脚本构建

1.由于内网环境,使用pom.xml构建需要maven插件,遂使用脚本构建。

2.在Jenkins服务器上编写同步脚本,将构建结果复制到Web服务器。

1.与Web服务器进行免密登录
1.Jenkins部署在CentOS中
# ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,拥有远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利
# 第一次需要密码登录
ssh-copy-id -i ~/.ssh/id_rsa.pub adam@192.168.x.x
  • 异常:
    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
  • 解决:
# 删除之前的认证再执行
vi ~/.ssh/known_hosts
2.Jenkins部署在Docker中

如果Jenkins部署在docker中,则需要在docker容器内配置免密登录

# 进入容器
docker exec -it 0 /bin/bash
# 如果没有,则生成公私钥对
cd /root/.ssh
# 生成密钥对
ssh-keygen -t rsa
# 私钥 - 添加到Jenkins
cat ~/.ssh/id_rsa
# 公钥 - 添加到GitLab
cat ~/.ssh/id_rsa.pub
# 配置免密登录
ssh-copy-id -i ~/.ssh/id_rsa.pub adam@192.168.x.x
2.Jenkins服务器上编写同步脚本

vim deploy.sh

#!/bin/bash
# 打印执行过程
set -ex
echo "当前用户:" && whoami
# Jenkins环境
jenkins_pro="cbei_isp"
jenkins_workspace="/var/jenkins_home"

# Web服务器宿主机
web_user="adam"
web_ip="192.168.x.x"

# 宿主机目录,只有宿主机/home/adam权限
# 将docker中/opt/apache-tomcat-8.0.52/webapps挂载到宿主机的/home/adam/tomcat/webapps/
tomcat_webapps="/home/adam/tomcat/webapps"
tomcat_logs="/home/adam/tomcat/logs"

echo "删除旧WAR和日志开始"
ssh $web_user@$web_ip "rm -rf $tomcat_webapps/*.war"
ssh $web_user@$web_ip "rm -rf $tomcat_logs/*"
echo "删除旧WAR和日志结束"
sleep 3

echo "复制WAR到Web服务器,并重命名"
scp $jenkins_workspace/workspace/$jenkins_pro/target/demo-0.0.1-SNAPSHOT.war $web_user@$web_ip:$tomcat_webapps/demo.war

echo "结束"
  • 授权
chmod 777 deploy.sh
# ./deploy.sh
  • 调用脚本进行构建
  • 执行脚本当前位置可以在shell中输入pwd查看日志,默认在jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_tomcat_06pro

五、配置构建触发器

1.Web hook方式
1.Jenkins配置触发器

推荐使用Gitlab插件方式。(内网环境可以直接将外网环境下plugins包复制替换,并重启Jks。)

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_jenkins_07

安装完插件以后才会有该选项。

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_jenkins_08

允许分支触发该job。

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_tomcat_09

2.GitLab配置触发器认证

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_gitlab_10

将Jenkins配置的请求地址和Token填写到GitLab。

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_jenkins_11

添加成功

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_docker_12

由于安全问题,GitLab默认不允许请求本地网络,需要管理员权限设置为允许。

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_tomcat_13

管理员账户才有Admin Area

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_docker_14

设置允许本地网络进行web hooks和services。

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_tomcat_15

2.轮询方式

公司网络处于安全问题,Jenkins可以访问GitLab,但是GitLab无法访问Jenkins,所以采用轮询模式触发。设定轮询时间,定时检查GitLab是否有更新,更新则触发构建。

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_gitlab_16

六、GitLab配置Jenkins返回状态

1.GitLab中生成Access Token

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_jenkins_17

2.Jenkins配置GitLab生成的Token

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_tomcat_18

配置全局GitLab API token。

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_gitlab_19

将GitLab中生成的Access Token填入Jenkins中。

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_tomcat_20

七、构建后操作

jenkins自动化部署 打包docker项目 jenkins自动化部署git 项目_jenkins_21