安装GitLab,Jenkins,及自动化上线
前要:基本命令可以看此文 https://blog.csdn.net/kali_yao/article/details/120009293?spm=1001.2014.3001.5501完成整理工作流程:开发人员编写代码,将代码上传到GitLab服务器,Jenki...
目录
1.什么是持续集成(CI-Continuous integration)
2.什么是持续部署(CD-continuous deployment)
3.什么是持续交付(Continuous Delivery)
完成整理工作流程:
开发人员编写代码,将代码上传到GitLab服务器,Jenkins从GitLab服务器上面拉取最新代码数据到本地,根据Jenkins项目配置,将代码拉取到本地后,可以进行编译、测试、打包等工作,最后将数据包写入到共享服务器,应用服务器最后从共享服务器拉取数据实现上线功能。
一.DevOps简介
1.什么是持续集成(CI-Continuous integration)
持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作
2.什么是持续部署(CD-continuous deployment)
是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表了一个开发团队的更新迭代速率
3.什么是持续交付(Continuous Delivery)
持续交付是在持续部署的基础之上,将产品交付到线上环境,因此持续交付是产品价值的一种交付,是产品价值的一种盈利的实现。
开发自己上传–最原始的方案 开发给运维手动上传–运维自己手动部署 运维使用脚本复制–半自动化 结合web界面一键部署–自动化
二.GitLLab安装与应用【yum安装】
1.安装前准备
# 防火墙与selinux设置 ~]# firewall-cmd --set-default-zone=trusted ~]# setenforce 0 ~]# sed -i '/SELINUX/s/enforcing/permissive' /etc/selinux/config ## 修改sshd端口 # 因为git是通过SSH协议的形式访问的,需要占22端口,而sshd服务也需要占22端口,所以需修改sshd服务端口 ~]# vim /etc/ssh/sshd_config Port 36000 ~]# service sshd restart # 注还需要准备443,80端口
2.先安装依赖包
~]# yum install -y vim gcc gcc-c++ wget net-tools lrzsz iotop lsof iotop bash-completion ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix
3.装包(注意版本自定义)
~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm ~]# yum -y install gitlab-ce* 安装包官方下载地址: https://packages.gitlab.com/gitlab/gitlab-ce yum源清华大学下载地址: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/
4.gitlab相关的目录
/etc/gitlab #配置文件目录 /run/gitlab #运行pid目录 /opt/gitlab #安装目录 /var/opt/gitlab #数据目录 /var/log/gitlab #日志目录
5.修改配置并初始化及验证
~]# vim /etc/gitlab/gitlab.rb external_url 'http://10.0.0.100' #修 改此行 # 增加下面行,可选邮件通知设置 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.qq.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "29308620@qq.com" gitlab_rails['smtp_password'] = "授权码" gitlab_rails['smtp_domain'] = "qq.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = "29308620@qq.com"
初始化服务 执行配置并启动服务:
#修改完配置文件要执行此操作 gitlab-ctl reconfigure
验证gitlab启动完成
gitlab-ctl status run: gitaly: (pid 24753) 245s; run: log: (pid 24378) 310s run: gitlab-monitor: (pid 24824) 244s; run: log: (pid 24595) 283s run: gitlab-workhorse: (pid 24776) 245s; run: log: (pid 24448) 304s run: logrotate: (pid 24531) 296s; run: log: (pid 24530) 296s run: nginx: (pid 24472) 302s; run: log: (pid 24471) 302s run: node-exporter: (pid 24574) 290s; run: log: (pid 24573) 290s run: postgres-exporter: (pid 24847) 243s; run: log: (pid 24662) 275s run: postgresql: (pid 24204) 365s; run: log: (pid 24203) 365s run: prometheus: (pid 24832) 244s; run: log: (pid 24625) 281s run: redis: (pid 24144) 371s; run: log: (pid 24143) 371s run: redis-exporter: (pid 24610) 282s; run: log: (pid 24609) 282s run: sidekiq: (pid 24362) 312s; run: log: (pid 24361) 312s run: unicorn: (pid 24722) 250s; run: log: (pid 24322) 314s
6.常用命令及例子
gitlab-rails #用于启动控制台进行特殊操作,如修改管理员密码、打开数据库控制台( gitlab-rails dbconsole)等 gitlab-psql #数据库命令行 gitlab-rake #数据备份恢复等数据操作 gitlab-ctl #客户端命令行操作行 gitlab-ctl stop #停止gitlab gitlab-ctl start #启动gitlab gitlab-ctl restar #重启gitlab gitlab-ctl status #查看组件运行状态 gitlab-ctl tail nginx #查看某个组件的日志
首次登录web页面,必须先设置密码,密码要求最少8位
三.GitLab容器安装
1.防火墙、SELinux
~]# firewall-cmd --set-default-zone=trusted ~]# setenforce 0 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/ssh/sshd_config
2.修改sshd默认端口
因为Git是通过SSH协议形式访问,后面需要启动GitLab容器,该容器需要占用22端口,而电脑的sshd服务也需要占用22端口(端口冲突),所以需要提前修改sshd默认端口,将端口修改为2022
~]# vim /etc/ssh/sshd_config Port 2022 ~]# systemctl restart sshd ~]# ssh -p 2022 192.168.4.20 (-p 可以放后面) #远程测试
注意:修改后需要重新登录一次虚拟机(重新登录需要指定端口)。
3.准备容器环境
# 准备yum源安装docker ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ~]# yum clean all && yum repolist && yum makecache ## 安装依赖 ~]# yum install -y vim gcc gcc-c++ wget net-tools lrzsz iotop lsof iotop bash-completion ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix # 安装docker ~]# yum install -y docker-ce ~]# systemctl enable docker.service --now 此操作联网: ~]# docker search gitlab-ce #查找 ~]# docker pull gitlab/gitlab-ce # 下载镜像
4.创建数据目录
容器无法持久保存数据,需要将真机目录和容器目录绑定,实现数据永久保存
~]# mkdir -p /srv/gitlab/{config,logs,data} ~]# ls /etc/resolv.conf # 必须要有该文件,默认linux有
5.启动容器
~]# docker run -d -h gitlab --name gitlab -p 443:443 -p 80:80 -p 22:22 --restart=always -v /data/gitlab/config:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab twang2218/gitlab-ce-zh # run 起容器 # -d 放入后台 # -h是在容器内的主机名 # --name 起一个容器名 # -p 映射端口 # --restart=always #(表示此容器自动开启【关不了gitlab】) # -v 映射文件 # 密码查看(可忽略) ~]# docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
四.GitLab网页操作
1.用浏览器访问GitLab页面,
初始化登录密码(用户root/密码如上,或自己修改)
首次登录web页面,必须先设置密码,密码要求最少8位
2.配置GitLab
1)创建用户
添加密码
测试登录
2)创建组
将用户加入到组
3)创建项目(类似于创建一个仓库)
五.客户端测试
1.查看仓库地址
2.客户端使用密码管理GitLab项目
~]# yum -y install git # 配置hosts ~]# vim /etc/hosts 172.17.0.51 gitlab ## 使用刚刚创建的用户 ~]# git config --global user.name "kali" ~]# git config --global user.email "20236305@qq.com" # 或者使用管理员 ~]# git config --global user.name "Administrator" ~]# git config --global user.email "admin@example.com" ~]# git clone http://gitlab/devops/myproject.git # 示例 ~]# cd myproject ~]# touch README.md ~]# git add README.md ~]# git commit -m "add README" ~]# git push -u origin master Username for 'http://192.168.4.20': keke #这里输入用户名 Password for 'http://jerry@192.168.4.20': 123456789 #这里输入密码
3.SSH免密上传
1)客户端生成SSH密钥
在客户端操作
~]# rm -rf /root/.ssh/known_hosts #删除之前的ssh远程记录 ~]# ssh-keygen #生成ssh密钥文件 ~]# cat ~/.ssh/id_rsa.pub # 查看密钥文件 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPVwP8E7TtKha9H8Ec+CU2n19aIPo9sUa/pdM7gRaf0yG+BcdyQ7Hgi6pI51IhX6tat46L5tLkAY7urVeEmnPtUk/TVIUc0smJPXYKIggOCr2dDd9s1S0
2)使用用户登录GitLab
页面用户第一次登录页面需要重置一次密码,密码可以与旧密码相同
3)上传密钥
4)使用密钥管理GitLab项目
前面已经用http的方式访问过服务器的代码仓库了,这里把之前的http服务器信息删除,使用ssh协议访问(在客户端操作)
~]# cd /root/myproject ~]# git remote -v origin http://gitlab/devops/myproject.git (fetch) origin http://gitlab/devops/myproject.git (push) # 删除 ~]# git remote remove origin # 添加 ~]# git remote add origin git@gitlab:devops/myproject.git # 查看测试 ~]# git remote -v origin git@gitlab:devops/myproject.git (fetch) origin git@gitlab:devops/myproject.git (push)
5)上传静态页面代码测试
~]# echo "hello world" > README.md ~]# git add . ~]# git commit -m "update" ~]# git push -u origin master ## 导入一个项目测试(可以到github) ~]# dnf -y install unzip tar ~]# unzip www_template.zip ~]# cp -r www_template/* myproject/ ~]# cd myproject/ ~]# git add . ~]# git commit -m "web site" ~]# git push -u origin master ~]# git tag v1 # 打个标签 ~]# git push -u origin v1
查看定义的标签
六.yum部署Jenkins
1.设置防火墙和SELinux
~]# firewall-cmd --set-default-zone=trusted ~]# setenforce 0 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
2.安装依赖软件
网页下载Index of /jenkins/redhat-stable/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
~]# rz -be [包] ~]# dnf -y install git postfix mailx java-11-openjdk ~]# systemctl enable postfix --now
备注:Git(版本控制软件)、postfix(邮件服务器软件(发))、mailx(邮件客户端软件(收))、openjdk(Java JDK工具)
3.部署、初始化Jenkins
http://172.17.64.16:8080/login?
~]# dnf -y install ./jenkins-2.164.3-1.1.noarch.rpm ~]# systemctl enable jenkins ~]# systemctl start jenkins
第一次访问会提示初始密码的位置(密码在/var/lib/Jenkins/secrets/initialAdminPassword文件中)
~]# cat /var/lib/jenkins/secrets/initialAdminPassword 9424973edc06471aa268bb35c68f95cd
这里选择跳过不安装插件
可以选择不创建用户
4.管理Jenkins插件、系统配置
1)重置管理员密码。
使用新密码重新登录
2)插件管理。 查看插件列表
3)拷贝插件文件到Jenkins目录,Jenkins插件目录为插件目录:/var/lib/jenkins/plugins/。
Jenkins插件文件在目录:jenkins_plugins.tar.gz。
插件包含:中文插件、Git插件等。
可以到官网上下载插件包在拷贝到/var/lib/jenkins/plugins/
Apache HttpComponents Client 4.x API Plugin Command Agent Launcher Plugin Credentials Plugin Display URL API Git client plugin Git Parameter (Plug-In) Git plugin Trilead API Plugin Structs Plugin SSH Credentials Plugin Script Security Plugin SCM API Plugin Mailer Plugin Localization: Chinese (Simplified) Localization Support Plugin JSch dependency plugin JUnit Plugin(Junit SQL Storage Plugin) jQuery plugin JAXB plugin Oracle Java SE Development Kit Installer Plugin Pipeline: Step API Pipeline: SCM Step Pipeline: API # 注意下载插件得时候要注意是否有依赖得插件一起安装了(害得我还一直找包) ~]# cp -rp jenkins_plugins/* /var/lib/jenkins/plugins/ ~]# chown jenkins.jenkins /var/lib/jenkins/plugins/ ~]# systemctl restart jenkins # 注意文件权限
有网的情况下也可以直接安装
如果在搜索区找不到时,记得查看安装了的,有个时候会当依赖安装掉
重新登录Jenkins网页控制台
4)再次查看插件列表
5)调整系统设置,配置邮箱(测试的话可以不配置)
七docker安装jenkins
1.安装Jenkins
下载Jenkins,lts代表最新版
# 准备yum源安装docker ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ~]# yum clean all && yum repolist && yum makecache ## 安装依赖 ~]# yum install -y vim gcc gcc-c++ wget net-tools lrzsz iotop lsof iotop bash-completion ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix # 安装docker ~]# yum install -y docker-ce ~]# systemctl enable docker.service --now # 下载镜像 ~]# docker pull jenkins/jenkins:lts # 查看Jenkins镜像 ~]# docker images ~]# docker inspect jenkins镜像ID
2.起容器准备
# 创建一个Jenkins目录,用于容器内目录挂载宿主机 ~]# mkdir /data/jenkins_home ~]# chown -R 1000:1000 /data/jenkins_home
3.安装
# 安装启动Jenkins容器 ~]# docker run -d --name jenkins -p 8080:8080 -v /data/jenkins_home:/var/jenkins_home jenkins/jenkins:lts; 备注: -d # 启动在后台 --name # 容器名字 -p # 端口映射(8081:宿主机端口,8080:容器内部端口) -v # 数据卷挂载映射(/data/jenkins_home:宿主机目录,/var/jenkins_home:容器目录) jenkins/jenkins:lts # 镜像 # 查看Jenkins启动情况 ~]# docker ps | grep jenkins
云服务器8080端口要开启 因为本操作是在腾讯云ELB上进行安装的,需要在安全组里开放8080此端口,咱自己用,最好还是指定下IP访问Jenkins http://腾讯IP:8081
4.配置Jenkins
解锁
在安装完成后,默认生成了一个登录密码,首次登录需要这个密码。 密码容器内路径:var/jenkins_home/secrets/initialAdminPassword 但是我们不是之前在宿主机挂载过目录吗,直接在宿主机就可以查看密码了 查看密码:然后复制粘贴即可
~]# cat /data/jenkins_home/secrets/initialAdminPassword
5.安装插件
推荐直接点左边的推荐插件,看网速吧,慢的话半小时,但是至少是全的,省事
管理用户创建 创建一个管理员账户,相当于admin
配置完成
八.Jenkins项目管理
1.浏览器访问
Jenkins服务器8080端口。
默认Jenkins会拉取最新版本的代码,这里的设置可以让Jenkins拉取特定的分支或标签(tag)的代码
继续设置Git参数,定义Git仓库的URL路径,以及需要下载克隆的版本或分支
注:指定分支必须与上图git参数一样
如果是git init创建的git则需要在添加那输入用户与密钥
2.构建(build)Jenkins项目
首先需要找到刚刚常见的项目
查看是否正确
查看操作
3.查看Jenkins拉取的代码数据
默认Jenkins会加拉取的代码数据保存到/var/lib/Jenkins/workspace/目录
# 注意需一层一层看 ~]# ls /var/lib/jenkins/ ~]# ls /var/lib/jenkins/workspace/ ~]# ls /var/lib/jenkins/workspace/myweb/ # 如果此时拉取代码可以发现位置还是这,并且会覆盖 ~]# rm -rf /var/lib/jenkins/workspace/myweb/* ## 容器查看 ~]# ls /data/jenkins_home/workspace/myweb
4.修改项目配置
如果代码有多个版本或分支,每次都将代码拉取到相同位置,会产生数据覆盖,我们可以修改项目配置,将不同的版本和分支数据保存到不同子目录下。 点击《配置》,重新修改Jenkins项目配置
1)为Jenkins项目添加附加动作行为,将代码拉取输出到子目录(Check out to a sub-directory)
2)设置邮件通知,在构建失败时可以给特定人员发送邮件(测试的话可以不配置)
英文配置
3)再次构建项目,并查看数据。 重新构建项目
# 这里就以容器为示例 # 先删除 ~]# rm -rf /data/jenkins_home/workspace/myweb/*
然后拉取
# 最后查看 ~]# ls myweb-v1
九.构建分发服务器
1.安装、配置FTP共享服务器
1)设置防火墙、SELinux
~]# firewall-cmd --set-default-zone=trusted ~]# setenforce 0 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
安装配置vsftpd、启动服务
~]# dnf -y install vsftpd #安装软件 ~]# vim /etc/vsftpd/vsftpd.conf #修改vsftpd配置文件 anonymous_enable=YES #允许匿名访问ftp8.2版本激活ftp要到配置文件里面 ~]# mkdir -p /var/ftp/deploy/packages ~]# chown -R :jenkins /var/ftp/deploy/ #修改权限将目录所属组修改为jenkins ~]# chmod -R 775 /var/ftp/deploy/ #修改权限让jenkins组对该目录有读写权限 ~]# systemctl enable vsftpd --now #设置服务为开机自启动服务,并立刻启动该服务
2.修改GitLab项目配置
1)修改项目配置,添加构建步骤
2)编写构建脚本,脚本内容如下
########### # 要求是搭建一个ftp然后把代码拷贝到这个ftp文件中 ########### ## 如果是服务器的搭建的就可以这么写 pkg_dir=/var/ftp/deploy/packages #定义变量pkg_dir,变量值为ftp共享目录。 cp -r myweb-$web $pkg_dir #将jenkins拉取到/var/lib/Jenkins/workspace/myweb-$web目录的数据拷贝的ftp共享目录 rm -rf $pkg_dir/myweb-$web/.git #上一步拷贝过来的数据目录下包含一个隐藏.git目录,删除该git仓库目录 cd $pkg_dir/ #cd到ftp共享目录下 tar czf myweb-$web.tar.gz myweb-$web #将ftp共享目录下的代码数据打包 rm -rf myweb-$web #将ftp共享目录下的代码数据目录删除 md5sum myweb-$web.tar.gz | awk '{print $1}' > myweb-$web.tar.gz.md5 #校验打包文件的HASH值(哈希值),并将结果写入到一个文件中。 cd .. #返回上一级目录 echo -n $web > ver.txt #将当前Git版本信息写入ver.txt文件 ## 容器的写法 # 1.在本地书写脚本 ~]# vim ceshi.sh #!/bin/bash rm -rf myweb-$web/.git tar czf $web.tar.gz myweb-$web rm -rf myweb-$web md5sum $web.tar.gz | awk '{print $1}' > $web.tar.gz.md5 echo -n $web > ver.txt # 2.上传容器并查看 ~]# docker cp ceshi.sh 29:./ ~]# docker exec -it 29 cat /ceshi.sh # 3.执行如下操作3) # 4.书写脚本执行项目拉取 ~]# vim ceshi2.sh #!/bin/bash pkg_dir=/var/ftp/deploy/packages web_dir=/data/jenkins_home/workspace/myweb mv $web_dir/* $pkg_dir/
3)重新构建项目,查看数据
使用浏览器访问FTP服务,查看数据
十.自动化上线
1.安装配置httpd;编写上线脚本;完成整个工作流程
1)设置防火墙和SELinux
~]# firewall-cmd --set-default-zone=trusted ~]# setenforce 0 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
2)安装、配置httpd。
~]# dnf -y install httpd wget tar #安装httpd、tar和wget ~]# systemctl enable httpd --now #设置开启自启,并立刻启动
2.编写自动化上线脚本
~]# vim web.sh #!/bin/bash #定义变量,指定FTP共享路径 ftp_url=ftp://192.168.4.30/deploy #定义变量,指定网页根路径 web_dir=/var/www/html #定义函数,行数名为down_file,该函数的作用是从FTP服务器下载代码数据到网站根目录 down_file(){ #获取FTP服务器上面最新构建的代码版本号 #curl是基于命令行的浏览器,-s选项为静默访问,不显示下载过程(可以自己对比不是用-s的差异) version=$(curl -s $ftp_url/ver.txt) # -s静默模式不显示 #将服务器上面的版本文件下载到web服务器的/var/www/html/目录下 #wget为下载工具(如果没有则需要安装),-q选项为静默模式下载,不显示下载过程 #-O选项可以指定将文件下载到哪里,这里是下载到/var/www/html/ver.txt wget -q $ftp_url/ver.txt -O $web_dir/ver.txt #下载代码数据的打包文件,根据前面获取的版本号,下载对应的版本数据打包文件 wget -q $ftp_url/packages/myweb-$version.tar.gz -O $web_dir/myweb-$version.tar.gz #对下载下来的数据打包文件计算HASH值(哈希值),awk过滤仅显示第一列数据结果 hash=$(md5sum $web_dir/myweb-$version.tar.gz| awk '{print $1}') #使用curl访问ftp服务器上面的HASH值 ftp_hash=$(curl -s $ftp_url/packages/myweb-$version.tar.gz.md5) #对比本地和FTP服务的HASH值是否一致,如果不一致代表数据损坏了 #如果一致就可以解压该数据包,将数据解压到网站根目录下/var/www/html/ if [ "$hash" == "$ftp_hash" ];then tar -xf $web_dir/myweb-$version.tar.gz -C $web_dir fi } #判断如果本地没有/var/www/html/ver.txt文件,则直接调用前面的函数下载代码数据 if [ ! -f $web_dir/ver.txt ];then down_file fi #盘如果本地有/var/www/html/ver.txt文件,则判断本地版本文件和FTP版本文件是否一致 #一致就不再下载FTP的数据,如果不一致则调用前面的函数下载新的代码数据包 if [ -f $web_dir/ver.txt ];then ftp_ver=$(curl -s $ftp_url/ver.txt) local_ver=$(cat $web_dir/ver.txt) if [ "$ftp_ver" != "$local_ver" ];then down_file fi fi ~]# chmod +x web.sh #添加可执行权限 ~]# ./web.sh #执行脚本
更多推荐
所有评论(0)