赞
踩
jenkins主机内存和gitlab主机内存最好配置4G及以上,防止各自的web端打不开
1.配置JDK环境
1)jdk解压到此目录
[root@localhost src]# pwd /usr/local/src
[root@localhost src]# tar xvf jdk-8u211-linux-x64.tar.gz
2)创建jdk相关的软连接
[root@localhost src]# ln -sv jdk1.8.0_211/ jdk
[root@localhost src]# ln -sv /usr/local/src/jdk/bin/* /usr/bin/
3)配置jdk的环境变量
[root@localhost src]# vim /etc/profile
……
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
4)环境变量生效
[root@localhost src]# source /etc/profile
5)测试java命令并查看java的版本号
[root@localhost src]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
2.安装并配置jenkins
1)下载rpm包并进行安装,可以看到jenkins的rpm包在安装时无依赖
[root@localhost rpm]# ls
jenkins-2.164.3-1.1.noarch.rpm
[root@localhost rpm]# rpm -ivh jenkins-2.164.3-1.1.noarch.rpm
warning: jenkins-2.164.3-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:jenkins-2.164.3-1.1 ################################# [100%]
2)修改jenkins的配置文件
[root@localhost jenkins]# grep '^[a-Z]' /etc/sysconfig/jenkins
JENKINS_HOME="/var/lib/jenkins" #jenkins的家目录,保存着其构建的项目、安装的插件、
JENKINS_JAVA_CMD=""
JENKINS_USER="root" #默认是jenkins用户,这里将这里改为root用户,避免将来部署代码到后端服务因为权限问题导致部署失败
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dcom.sun.management.jmxremote #options选项中开启监控功能,为zabbix等监控软件提供一个监控接口
-Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname="192.168.1.15""
JENKINS_PORT="8080"
JENKINS_LISTEN_ADDRESS=""
JENKINS_HTTPS_PORT=""
JENKINS_HTTPS_KEYSTORE=""
JENKINS_HTTPS_KEYSTORE_PASSWORD=""
JENKINS_HTTPS_LISTEN_ADDRESS=""
JENKINS_DEBUG_LEVEL="5"
JENKINS_ENABLE_ACCESS_LOG="no"
JENKINS_HANDLER_MAX="100"
JENKINS_HANDLER_IDLE="20"
JENKINS_ARGS=""
3)启动jenkins服务
[root@localhost rpm]# systemctl start jenkins
4)查看jenkins服务监听的端口
[root@localhost rpm]# ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
……
LISTEN 0 50 :::8080 :::*
users:(("java",pid=2739,fd=166))
……
3.浏览器访问jenkins的web端并登录
1)浏览器访问8080端口
2)服务器主机上查看此初始化管理员秘钥文件,并将秘钥输入登录jenkins的web端
[root@localhost rpm]# cat /var/lib/jenkins/secrets/initialAdminPassword
fb58302d30c34478b086244bd725bc68
3)安装默认推荐插件
4)创建一个管理员账号
5)进入jenkins主界面
4.安装gitlab和blue ocean相关必要插件
1)在插件管理中过滤出需要安装插件
2)正在安装gitlab相关的插件
3)安装一个blue ocean插件,是一个界面显示插件
4)安装角色权限插件
5.创建新用户和角色以及权限管理等
1)创建一个新用户
2)打开全局安全设置,将认证类型改为角色认证,默认的认证类型是登录用户可以做任何事
3)创建一个角色
4)只给此角色分配一个读权限
5)将新创建的用户服务common角色
6)利用新创建的用户登录jenkins客户端
7)可以看到此时的普通用户登录后没看到系统管理这个选项,普通用户无权限,设置了只有读权限
8)此时创建一个job
9)可以看到没有权限创建job
6.配置管理员邮箱
1)进入系统管理选择系统设置,填写管理员的邮箱配置
2)邮箱测试
7.通过ssh_key自动拉取gitlab中的代码
在gitlab的web端
1)点击用户里面的setting并找到ssh keys选项
2)再将jenkeys的服务器的公钥添加到gitlab服务器
在jenkins服务端
1)此时可在命令行直接拉取gitlab的代码
[root@jenkins ~]# git clone git@192.168.1.30:jie/web-page.git
Cloning into 'web-page'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), 244 bytes | 0 bytes/s, done.
2)查看拉取的代码目录
[root@jenkins ~]# ls
anaconda-ks.cfg dump.rdb sentinel_26379.log web-page
3)进入目录查看代码内容,实现了在命令行直接拉取gitlab代码
[root@jenkins ~]# cat web-page/index.html
4)给jenkins的web端添加上自己的私钥,实现在jenkins的web端直接拉取代码
5)在构建一个项目工程
6)在点击源码管理选项进行连接gitlab的仓库地址配置、认证方式选择为私钥
7)点击立即构建
8)查看最近一次构建
9)查看控制台输出(console output)
10)jenkins的服务端验证所拉取的gitlab数据
[root@jenkins ~]# ls -a /var/lib/jenkins/workspace/website-html
. .. .git index.html
8.jenkins的web服务端通过shell脚本自动部署代码到后端服务
1)在jenkins服务端将免密认证文件发送到后端服务nginx的www用户的家目录下
[root@jenkins ~]# ssh-copy-id www@192.168.1.31
2)指定gitlab仓库连接url、认证类型
3)在构建环境中选择构建项目之前删除工作区间,编写构建中的shell脚本,再保存
4)在立即构建项目,并查看控制台输出的状态如下
5)在jenkins的服务端检查代码是否部署到本地
[root@jenkins ~]# ll /var/lib/jenkins/workspace/website-html/
total 16
-rw-r--r-- 1 root root 34 Jul 23 00:20 index.html
-rw-r--r-- 1 root root 10240 Jul 23 00:20 index.tar.gz
6)在后端服务nginx检查代码是否部署成功
[root@localhost html]# ll
total 16
-rw-r--r-- 1 www www 34 Jul 23 00:20 index.html
-rw-r--r-- 1 www www 10240 Jul 23 00:20 index.tar.gz
7)浏览器访问后端服务nginx
9.构建触发器,实现当一提交代码到gitlab仓库就触发jenkins自动部署代码到后端服务
gitlab服务
1)在一个项目里,点击Branch
2)创建一个开发新分支
jenkins服务端
1)点击系统管理,再找到全局安全设置
2)选择登录用户可以做任何事、取消"防止跨站点请求伪造”
3)安装这两插件
4)新建一个job
5)配置项目的源码管理,指定其gitlab仓库的url、认证类型、开发分支等
6)生成一个认证秘钥随机数
[root@jenkins ~]# openssl rand -hex 16
2fc11d619fe0c21facf6ddf71504a08e
7)将以上生成的随机数作为构建触发器认证的token
8)构建简单的测试命令
9)检查本地的项目配置文件保存的构建触发器的远程认证秘钥、执行的shell命令
10)访问url测试自否自动触发立即构建项目
或者直接curl
[root@jenkins ~]# curl http://192.168.1.15:8080/job/develop/build?token=2fc11d619fe0c21facf6ddf71504a08e
11)发现当访问文url时会自动触发构建项目
12)再修改为正式的构建shell远程执行命令,当一提交代码到gitlab仓库会自动触发将代码部署到nginx服务器
gitlab服务端
1)找到system hooks系统钩子,点击系统钩子进行配置
2)输入jenkins中的认证url,其他选项保持默认,点击add system hook添加系统钩子
3)点击测试系统钩子的可用性
4)出现201代码,建立连接成功,检测成功
在nginx服务端,克隆gitlab仓库代码,预先安装好git工具
1)指定从develop分支克隆代码,并填写登录用户名及密码
[root@nginx ~]# git clone -b develop http://192.168.1.30/jie/web-page.git
Cloning into 'web-page'...
Username for 'http://192.168.1.30': jie
Password for 'http://jie@192.168.1.30':
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 18 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (18/18), done.
2)查看克隆下来的代码环境
[root@nginx ~]# cd web-page/
[root@nginx web-page]# ls -a
. .. .git index.html
3)查看代码内容,并将代码修改
[root@nginx web-page]# cat index.html
[root@nginx web-page]# vim index.html
4)将修改好的代码添加到本地暂存区
[root@nginx web-page]# git add index.html
5)再将代码提交到工作区
[root@nginx web-page]# git commit -m 'audi_q7'
[develop b560fe3] audi_q7
1 file changed, 3 insertions(+), 1 deletion(-)
6)最后再提交到gitlab代码库
[root@nginx web-page]# git push
Username for 'http://192.168.1.30': jie
Password for 'http://jie@192.168.1.30':
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 280 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for develop, visit:
remote: http://192.168.1.30/jie/web-page/merge_requests/new?merge_request%5Bsource_branch%5D=develop
remote:
To http://192.168.1.30/jie/web-page.git
de793ac..b560fe3 develop -> develop
7)在jenkins服务器上查看,可以看到自动触发构建
8)查看jenkins的控制台输出信息,代码部署到nginx服务成功
9)查看代码是否部署到nginx服务器
root@nginx ~]# ll /usr/share/nginx/html/
total 16
-rw-r--r-- 1 www www 140 Jul 24 19:51 index.html
-rw-r--r-- 1 www www 10240 Jul 24 19:51 index.tar.gz
10)查看nginx服务是否正常启动
[root@nginx ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2019-07-24 19:51:12 CST; 4min 38s ago
Process: 7582 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 7580 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 7578 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Main PID: 7584 (nginx)
CGroup: /system.slice/nginx.service
├─7584 nginx: master process /usr/sbin/nginx
├─7585 nginx: worker process
└─7586 nginx: worker process
11)浏览器访问nginx服务器,代码自动部署成功
12)在gitlab服务中若需要合并代码,点create merge request 创建合并请求,待上级确定后在执行合并到master分支上
10.实现项目job关联,即当一个项目执行完成会自动触发另一个项目执行
1)在jenkins中添加构建后放入执行动作,触发时必须上一个项目构建稳定、每次构建不稳定或有故障发送邮件通知
2)点击立即构建项目
3)构建后会立即触发下一个项目的构建
4)查看被触发的项目
总结:这种项目关联适用于将一个项目拆成多个小项目,例如其中一个项目job负责代码测试,另一个job负责代码打包
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。