jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

jenkins主机内存和gitlab主机内存最好配置4G及以上,防止各自的web端打不开

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

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端口

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

2)服务器主机上查看此初始化管理员秘钥文件,并将秘钥输入登录jenkins的web端

[root@localhost rpm]# cat /var/lib/jenkins/secrets/initialAdminPassword
fb58302d30c34478b086244bd725bc68

3)安装默认推荐插件

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

4)创建一个管理员账号

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

5)进入jenkins主界面

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

4.安装gitlab和blue ocean相关必要插件

1)在插件管理中过滤出需要安装插件

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

2)正在安装gitlab相关的插件

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

3)安装一个blue ocean插件,是一个界面显示插件

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

4)安装角色权限插件

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

5.创建新用户和角色以及权限管理等

1)创建一个新用户

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

2)打开全局安全设置,将认证类型改为角色认证,默认的认证类型是登录用户可以做任何事

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

3)创建一个角色

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

4)只给此角色分配一个读权限

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

5)将新创建的用户服务common角色

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

6)利用新创建的用户登录jenkins客户端

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

7)可以看到此时的普通用户登录后没看到系统管理这个选项,普通用户无权限,设置了只有读权限

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

8)此时创建一个job

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

9)可以看到没有权限创建job

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

6.配置管理员邮箱

1)进入系统管理选择系统设置,填写管理员的邮箱配置

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

2)邮箱测试

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

7.通过ssh_key自动拉取gitlab中的代码

在gitlab的web端

1)点击用户里面的setting并找到ssh keys选项

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发
2)再将jenkeys的服务器的公钥添加到gitlab服务器
jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

在jenkins服务端

1)此时可在命令行直接拉取gitlab的代码

[root@jenkins ~]# git clone [email protected]: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 
<h1>welcom to my gitlab page!</h1>

4)给jenkins的web端添加上自己的私钥,实现在jenkins的web端直接拉取代码

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

5)在构建一个项目工程

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

6)在点击源码管理选项进行连接gitlab的仓库地址配置、认证方式选择为私钥

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

7)点击立即构建

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

8)查看最近一次构建

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

9)查看控制台输出(console output)

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

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 [email protected]

2)指定gitlab仓库连接url、认证类型

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

3)在构建环境中选择构建项目之前删除工作区间,编写构建中的shell脚本,再保存

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

4)在立即构建项目,并查看控制台输出的状态如下

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

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

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

9.构建触发器,实现当一提交代码到gitlab仓库就触发jenkins自动部署代码到后端服务

gitlab服务

1)在一个项目里,点击Branch

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

2)创建一个开发新分支

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

jenkins服务端

1)点击系统管理,再找到全局安全设置

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

2)选择登录用户可以做任何事、取消"防止跨站点请求伪造”

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

3)安装这两插件

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

4)新建一个job

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

5)配置项目的源码管理,指定其gitlab仓库的url、认证类型、开发分支等

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

6)生成一个认证秘钥随机数

[root@jenkins ~]# openssl rand -hex 16
2fc11d619fe0c21facf6ddf71504a08e

7)将以上生成的随机数作为构建触发器认证的token

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

8)构建简单的测试命令

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

9)检查本地的项目配置文件保存的构建触发器的远程认证秘钥、执行的shell命令

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

10)访问url测试自否自动触发立即构建项目

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

或者直接curl
[root@jenkins ~]# curl http://192.168.1.15:8080/job/develop/build?token=2fc11d619fe0c21facf6ddf71504a08e

11)发现当访问文url时会自动触发构建项目

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

12)再修改为正式的构建shell远程执行命令,当一提交代码到gitlab仓库会自动触发将代码部署到nginx服务器

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

gitlab服务端

1)找到system hooks系统钩子,点击系统钩子进行配置

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

2)输入jenkins中的认证url,其他选项保持默认,点击add system hook添加系统钩子

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

3)点击测试系统钩子的可用性

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

4)出现201代码,建立连接成功,检测成功

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

在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://[email protected]': 
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 
<h1>welcom to my develop page</h1>
[root@nginx web-page]# vim index.html
<h1>welcom to my develop page</h1>
<h2>welcom to my develop page</h2>
<h3>welcom to my develop page</h3>
<h4>welcom to my develop page</h4>

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://[email protected]': 
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服务器上查看,可以看到自动触发构建

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

8)查看jenkins的控制台输出信息,代码部署到nginx服务成功

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

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服务器,代码自动部署成功

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

12)在gitlab服务中若需要合并代码,点create merge request 创建合并请求,待上级确定后在执行合并到master分支上

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

10.实现项目job关联,即当一个项目执行完成会自动触发另一个项目执行

1)在jenkins中添加构建后放入执行动作,触发时必须上一个项目构建稳定、每次构建不稳定或有故障发送邮件通知

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

2)点击立即构建项目

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

3)构建后会立即触发下一个项目的构建

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

4)查看被触发的项目

jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发

总结:这种项目关联适用于将一个项目拆成多个小项目,例如其中一个项目job负责代码测试,另一个job负责代码打包

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章