gitlab+jenkins 自动化部署 持续集成

Posted xiefugui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gitlab+jenkins 自动化部署 持续集成相关的知识,希望对你有一定的参考价值。

环境:

1、centos7.6

2、jdk1.8.0_141

3、4G 30G 4core

4、关闭防火墙和selinux

一、安装jenkins

  1、 下载jenkins https://pkg.jenkins.io/redhat/  jenkins-2.208-1.1.noarch.rpm

  2、安装jdk和jenkins rpm包

  rpm -ivh jdk-8u141-linux-x64.rpm

  rpm -ivh jenkins-2.208-1.1.noarch.rpm

  3、启动服务及设置开机启动

  systemctl start jenkins  && chkconfig jenkins on  service jenkins status

  /etc/sysconfig/jenkins   #配置文件,可查看监听端口及其它配置

  4、访问管理页面,可通过上面配置文件更改管理页面端口。 http://192.168.10.79:8080

  4.1、按照提示填写密码

    技术图片

 

 

   4.2、通过验证后,可选择右上角关闭或自定选择插件来安装。

    技术图片

 

     技术图片

 

 

 

   4.3、Jenkins 改成中文语言显示    

    系统管理    插件管理中下载如下插件接口

     Localization: Chinese (Simplified)

    修改admin 密码---> 右上角admin--->设置--->找到密码栏设置好进行保存

 

 

 

 

 

   4.4、下载安装插件

    4.4.1、通过界面进行搜索安装插件

    技术图片

 

 

     4.4.2、下载插件直接拷到服务器插件目录  /var/lib/jenkins/plugins/

    4.4.3 必须安装的几个插件

ssh                #执行远程脚本
GitLab Plugin    #集成gitlab用
Gitlab Hook Plugin    #钩子插件
Build Authorization Token Root Plugin    #构建授权token

 

二、安装gitlab

  1、安装环境依赖包,curl policycoreutils openssh-server openssh-clients postfix wget

  yum -y install curl policycoreutils openssh-server openssh-clients postfix wget

  2、关闭sendmail,iptables,开启postfix 开机启动

  systemctl enable postfix && systemctl start postfix    systemctl stop firewalld.service

  3、添加gitlab源,并安装,有可能出现问题,我这步老是出问题走的第4步进行安装

  curl -sS http://packages.gitlab.cc/install/gitlab-ce/script.rpm.sh | sudo bash
  yum -y install gitlab-ce

  4、下载rpm安装包安装

  wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.5.3-ce.0.el7.x86_64.rpm

  rpm -ivh gitlab-ce-12.5.3-ce.0.el7.x86_64.rpm

  5、修改gitlab配置文件并重置gitlab启动

  vim /etc/gitlab/gitlab.rb #修改gitlab配置文件

  external_url ‘http://192.168.10.53‘  #修改gitlab监听ip和端口

  gitlab-ctl reconfigure  #重置gitlab配置加载

  gitlab-ctl restart  #重启gitlab

  6、邮件设置

  6.1、vim /etc/gitlab/gitlab.rb  #编辑gitlab配置文件,添加以下配置

gitlab_rails[‘smtp_enable‘] = true
gitlab_rails[‘smtp_address‘] = "mail.king365pay.com"
gitlab_rails[‘smtp_port‘] = 25
gitlab_rails[‘smtp_user_name‘] = "xfg@king365pay.com"
gitlab_rails[‘smtp_password‘] = "xiefugui123"
gitlab_rails[‘smtp_domain‘] = "king365pay.com"
gitlab_rails[‘smtp_authentication‘] = "login"
gitlab_rails[‘smtp_enable_starttls_auto‘] = true
gitlab_rails[‘smtp_tls‘] = false
gitlab_rails[‘gitlab_email_from‘] = ‘xfg@king365pay.com‘

  6.2、重置gitlab配置文件并重启gitlab

  gitlab-ctl reconfigure
  gitlab-ctl restart

  6.3、打开邮件测试控制台进行测试

  gitlab-rails console    #测试控制台

  Notify.test_email(‘接收方邮件地址’,’邮件标题’,’邮件内容’).deliver_now   #测试邮件发送

  7、web第一次登录更改root密码

三、实现 jenkins +gitlab 自动更新代码

gitlab:    192.168.10.53
jenkins: 192.168.10.79:8080

  1、配置jenkins gitlab密钥免密验证

    1.1、jenkins服务器生成密钥对  ssh-keygen -t rsa  #将在 /root/.ssh/ 生成一对密钥对 id_rsa-->私钥  id_rsa.pub-->公钥

    1.2、把私钥拷贝到jenkins全局凭证里, jenkins web管理界面-->系统管理-->凭据-->系统-->全局凭据-->新建凭据

    1.3、添加全局用户名和私钥验证方式,把生成的 id_rsa 私钥拷到这里

    技术图片

 

  1.4、把jenkins root用户成生成的公钥拷贝到 gitlab,gitlab web管理界面, 右上角root下拉框-->设置-->左边菜单栏 ssh密钥-->jenkins上的 id_rsa.pub内容

     技术图片

 

  1.5、jenkins 使用 ssh-copy-id -i root@192.168.10.53

    更改gitlab ssh配置文件,开启密钥无密码验证方式

 

  2、配置jenkins ssh服务器
    jenkins web主页面-->系统管理-->系统设置-->ssh remote hosts-->添加gitlab ip port 使用刚才建立的私钥凭据

    技术图片

 

  3、gitlab配置, 用户,用户组,项目,绑定好三者关系,添加用户至用户组授权开发者权限,

   技术图片

 

  4、jenkins新建项目和设置

    4.1、新建一个构建自由风格的任务并进入配置,源码管理里,写入gitlab新建项目的地址,选择之前建立好的凭据

    技术图片

    4.2、gitlab添加webhook,如有报Url is blocked: Requests to the local network are not allowed,修改设置

    技术图片

 

 

 

 

    此处添加钩子的url和token是在jenkins项目里触发器里,高级里面生成的token和上面的链接

    技术图片

 

    技术图片

 

 

 

 

    4.3、立即构建并查看详细信息,并且查看项目目录查看是否拉取代码成功

    技术图片

 

    技术图片

 

    技术图片

 

 

     可以看到Jenkins已经成功从gitlab上面拉取代码

    4.4、修改jenkins运行用户为root, 便于接下来以root用户与web服务器的密钥认证,因jenkins的passwd里登录为 /bin/false,且没有与web服务器互相认证,无法正常运行脚本

    vim /etc/sysconfig/jenkins

    JENKINS_USER="root"

    5、新建一个web站点,并且建立好jenkins和web站点的密钥认证

      5.1、新建web站点可用nginx或tomcat.

      yum install nginx -y

      echo "<h1>Web Server</h1>" > /usr/share/nginx/html/index.html

      systemctl start nginx

      curl -I localhost

     技术图片

 

 

     ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.227   #建立jenkins与web服务器间的免密密钥登录认证

    6、自动化同步代码

    6.1、在jenkins上编写同步代码脚本

    cd /var/lib/jenkins/scripts

    vim deploy.sh   

技术图片
#!/bin/bash

CODE_DIR="/var/lib/jenkins/workspace/newtest"     #项目目录
DATE_TIME=`date +%Y-%m-%d-%H-%M-%S`     #时间格式
TAR_NAME=web-${DATE_TIME}.tar.gz        #打包后的名字
WEB_ADDR=192.168.10.227                   #web服务器地址
WEB_DIR="/usr/local/tomcat1/webapps"             #web服务器站点目录的上一级 "/usr/local/tomcat1/webapps"
WEB_NEWDIR_NAME=web-${DATE_TIME}        #web服务器新建的站点目录名字

#进入到项目目录并进行打包代码
tarcf_code(){
    cd $CODE_DIR && tar czf /opt/$TAR_NAME ./*
}

#拷贝到web服务器的站点目录的上一级
scp_code(){
    scp /opt/$TAR_NAME $WEB_ADDR:$WEB_DIR
}

#连接web服务器进行解压压缩包到新的一个已时间命名的站点目录
tarxf_code(){
    ssh $WEB_ADDR "cd $WEB_DIR && mkdir $WEB_NEWDIR_NAME && tar xf $TAR_NAME -C $WEB_NEWDIR_NAME"
}


#将新建的站点目录与html站点目录做一个软链接
ln_code(){
    ssh $WEB_ADDR "cd $WEB_DIR && rm -rf new && ln -s $WEB_NEWDIR_NAME new"
}

#重启tomcat
reboot(){
    ssh $WEB_ADDR "cd $WEB_DIR && sh ../bin/shutdown.sh && sh ../bin/startup.sh"
}

del_code(){
    ssh $WEB_ADDR "cd $WEB_DIR && rm -rf $TAR_NAME"
}


main(){
    tarcf_code;
    scp_code;
    tarxf_code;
    ln_code;
    reboot;
}
main
同步脚本

    6.2、配置jenkins,调用部署脚本

    技术图片

 

    7、配置jenkins返回构建状态到gitlab

     7.1、打开gitlab,右上角下拉设置,左连菜单栏访问令牌,然后生一个令牌,记录下token码 

    技术图片

 

    7.2、打开jenkins,系统管理-->系统设置-->gitlab,输入连接名和url,点击添加gitlab api token添加信息,测试连接

     技术图片

 

    7.3、配置项目设置里 构建后操作

    技术图片

 

     7.4、测试构建后的状态是否有返回gitlab

    技术图片

 

         

以上是关于gitlab+jenkins 自动化部署 持续集成的主要内容,如果未能解决你的问题,请参考以下文章

Linux-GitLab+Jenkins持续集成+自动化部署

Gitlab+jenkins持续集成+自动化部署

持续集成+自动化部署[代码流水线管理及Jenkins和gitlab集成]

1.GitLab和Jenkins 结合构建持续集成(CI)环境

GitLab+Jenkins结合构建持续集成(CI)环境

gitlab+jenkins 自动化部署 持续集成