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‘] = ""
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 私钥拷到这里
1.4、把jenkins root用户成生成的公钥拷贝到 gitlab,gitlab web管理界面, 右上角root下拉框-->设置-->左边菜单栏 ssh密钥-->jenkins上的 id_rsa.pub内容
1.5、jenkins 使用 ssh-copy-id -i
更改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 #建立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