一、安装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配置证书凭据
GitLab私有项目不能使用SSH凭据,只能使用账密凭据
1.创建账密凭据(GitLab私有项目)
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源码
-
选中工程 - 配置
-
源码管理
-
立即构建
-
查看构建地址
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查看日志,默认在 j e n k i n s h o m e / w o r k s p a c e / jenkins_home/workspace/ jenkinshome/workspace/pro
五、配置构建触发器
1.Web hook方式
1.Jenkins配置触发器
推荐使用Gitlab插件方式。(内网环境可以直接将外网环境下plugins包复制替换,并重启Jks。)
安装完插件以后才会有该选项。
允许分支触发该job。
2.GitLab配置触发器认证
将Jenkins配置的请求地址和Token填写到GitLab。
添加成功
由于安全问题,GitLab默认不允许请求本地网络,需要管理员权限设置为允许。
管理员账户才有Admin Area
设置允许本地网络进行web hooks和services。
2.轮询方式
公司网络处于安全问题,Jenkins可以访问GitLab,但是GitLab无法访问Jenkins,所以采用轮询模式触发。设定轮询时间,定时检查GitLab是否有更新,更新则触发构建。
六、GitLab配置Jenkins返回状态
1.GitLab中生成Access Token
2.Jenkins配置GitLab生成的Token
配置全局GitLab API token。
将GitLab中生成的Access Token填入Jenkins中。