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

nanbiebao 2019-12-20

环境:

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、按照提示填写密码

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

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

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

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

 4.3、Jenkins 改成中文语言显示    

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

     Localization: Chinese (Simplified)

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

   4.4、下载安装插件

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

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

     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‘] = ""
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‘] = ‘‘

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 私钥拷到这里

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

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

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

1.5、jenkins 使用 ssh-copy-id -i

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

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

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

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

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

4、jenkins新建项目和设置

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

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

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

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

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

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

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

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

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

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

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

     可以看到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

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

     ssh-copy-id -i ~/.ssh/id_rsa.pub    #建立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,调用部署脚本

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

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

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

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

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

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

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

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

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

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

         

相关推荐