介绍
如题,CI-CD整套部署过程及细节
教程
机器关闭selinux,firewalld。
jenkins与gitlab在同一台机器,所用用户均为root。
本教程所有服务均部署在一台EC2上,但部署过程与分布式部署无异。
因所用EC2处于公网环境,修改Jenkins和gitlab访问端口仅为一种安全思路。
一、创建EC2实例
在AWS的EC2控制台中选择启动实例,然后依次选择
-->系统版本
-->实例类型- 选择实例硬件配置,8G内存足够用
-->配置实例详细信息- 网络和子网选择能用的就行,IAM角色暂时不创建,其他选项默认即可
-->添加存储- 20G够用
-->添加标签- 例如:name uxian
-->配置安全组- 新建安全组默认只开放入站22端口,出站关闭所有端口
-->审核和启动
安全组配置根据需要开启对应端口,否则将会影响对该服务器的web访问
二、部署Gitlab
1、下载gitlab-rpm
下载地址:https://packages.gitlab.com/gitlab/gitlab-ce选择最新版本即可
2、部署gitlab
依赖关系:
yum -y install curl policycoreutils openssh-server openssh-clients
安装命令:
rpm -ivh gitlab*******.rpm
设置端口:
vim /etc/gitlab/gitlab.rb (默认80,改为88)
相关命令:
gitlab-ctl reconfigure 重新读取配置文件
/usr/bin/gitlab-ctl start 启动
加入开机自启:
echo "/usr/bin/gitlab-ctl start" >> /etc/rc.d/rc.local
3、登录并创建项目
第一次登录会要求设置管理员用户密码
创建组→创建项目(代码的容器)
4、为jenkins配置gitlab API Token、配置gitlab公钥
在部署jenkins的模块中一起说
三、部署Jenkins
1、下载所需软件包
jenkins-rpm:https://pkg.jenkins.io/redhat-stable/选择最新版即可
jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
git:https://mirrors.edge.kernel.org/pub/software/scm/git/选择最新版即可
maven:http://mirror.bit.edu.cn/apache/maven/maven-3/选择最新版本即可
2、安装jenkins,不要启动
安装命令:
rpm -ivh jenkins-*****.rpm
设置端口:
vim /etc/sysconfig/jenkins (默认8080,改为8888)
3、部署java环境
解压jdk包:
tar xvf jdk-8u151****
mv jdk1.8.0_151 /usr/local/java
声明环境变量:
echo "export PATH=$[PATH:/usr/local/java/bin/](http://path/usr/local/java/bin/)" >> /etc/bashrc
source /etc/bashrc
4、部署git环境
依赖关系:
yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
安装git:
tar xf git-2.9.5.tar.gz
cd git-2.9.5/
make prefix=/usr/local/git all;make prefix=/usr/local/git install
声明环境变量:
echo "PATH=$PATH:[/usr/local/git/bin](http://bin/usr/local/git/bin)" >> /etc/bashrc
source /etc/bashrc
5、部署maven环境
安装maven:
tar xvzf apache-maven-3.5.3-bin.tar.gz -C /usr/local/
声明环境变量:
echo "export PATH=$[PATH:/usr/local/maven/bin](http://path/usr/local/maven/bin)" >> /etc/bashrc
source /etc/bashrc
测试maven:mvn -version
6、启动并访问jenkins界面
启动jenkins并设置开启自启:
systemctl start jenkins;systemctl enable jenkins
生成初始密码:
cat /var/lib/jenkins/secrets/initialAdminPassword **登陆后修改密码**
安装推荐插件
安装自定义插件:AWS codedeploy、Gitlab、Maven Integration、Gitlab Hook、Email Extension Plugin
7、jenkisn全局工具配置
jenkins界面-->系统管理-->全局工具配置
8、创建jenkins凭据(Gitlab API Token、SSH Username with private key)
-Gitlab API Token
-SSH Username with private key
--将公钥文件内容复制到gitlab端
--在jenkins端配置私钥凭据
四、创建S3桶
在AWS的S3控制台点击创建存储桶
名称和区域
|-存储桶名称:按需设计
|-区域:随意,尽量与EC2一致
配置选项
可以设置一个name标签,其他选项默认为空即可,勾选是需要付费的
设置权限
默认设置,无需更改
审核
确认无误后即可创建存储桶
五、在业务服务器安装codedeploy-agent
codedeploy-agent本该安装在部署业务的服务器上,但在该实验环境,连同gitlab,jenkins装在一台机器上。
但部署过程与分布式部署无异。
sudo yum install ruby
sudo yum install wget
cd /home/<username>
wget https://<bucket-name>.s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
要检查服务是否正在运行,请运行以下命令:
sudo service codedeploy-agent status 或 sudo systemctl status codedeploy-agent
启动服务:
sudo service codedeploy-agent start 或 sudo systemctl start codedeploy-agent
<username>为业务服务器所用用户名
<bucket-name> 是包含适用于您所在区域的 CodeDeploy 资源工具包文件的 Amazon S3sds-s3-latest-bucket-name 存储桶的名称。例如,对于 美国东部(俄亥俄)区域,将 <bucket-name> 替换为 aws-codedeploy-us-east-2。有关存储桶名称的列表,请参阅各区域的资源工具包存储桶名称。
六、在AWS Codedeploy控制台创建应用程序
点击
创建应用程序
-应用程序名称:按需填写
-部署组名称:按需填写
部署类型
选择就地部署即可,关于就地部署/蓝绿部署
环境配置
选择Amazon EC2实例,通过标签键值对选中第一步创建的EC2实例
匹配的实例
选中的EC2实例基本信息将显示在这里
负载均衡器
不需要选中
部署配置
三种部署配置选择,随意一个都可以
七、创建IAM角色配置策略并关联EC2和AWS Codedeploy
1、IAM角色简介
以上均为服务的部署安装阶段,到目前为止:jenkins、S3、codedeploy-agent端所在业务服务器还只是相互独立的个体。
接下来要配置的IAM角色将是链接各部分的纽带,它将原本相互独立的个体整合到一个体系中。
为实现服务整合,需要配置两个IAM角色:
1、业务服务器(codedeploy-agent所在EC2实例):最少需要拥有对S3的get、list权限
2、AWS CodeDeploy应用程序:需要拥有codedeploy的操作权限、最低的S3put权限、EC2的操作权限
2、创建IAM角色并配置策略
1、在IAM控制面版选择 创建角色,选择受信任实体的类型 为 AWS产品,根据角色提供权限的对象选择 将使用此角色的服务
2、为该角色创建权限策略,选择拥有对哪项服务的权限,可使用可视化编辑器或JSON两种方式编辑权限策略,能够达到相应权限即可
3、权限策略设置完成后,为该角色设置标签
4、审核无误后创建成功
3、为EC2和AWS CodeDeploy关联角色
八、创建并配置Jenkins项目完成自动部署
1.创建一个maven项目
2.配置gitlab项目url
3.配置构建触发器(自动构建/定时构建)
定时构建:
与linux的计划任务类似,五个参数分别为“分 时 日 月 周”,以空格为分隔符。示例如下:
--H/5 0-3 1,3 10,11 * 直译:每5分钟 0时到3时每隔1小时 周1与周3 10月与11月 所有周 翻译:在10月和11月的 每周的 周1和周3的 0点到3点之间 每5分钟 执行构建
触发器构建:
若出现其他报错,极大可能为请求未能找到jenkins服务器,请检查url或代理设置或相关安全策略等。。
4.配置BUILD(构建)步骤
关于编译命令:
-e 控制maven的日志级别,产生执行错误相关信息
-T 线程数,可以并行地构建那些相互间没有依赖关系的模块,充分利用多核CPU资源
此处隐藏了开头的mvn命令,因为jenkins会自动补上,加上反而会报错
4.1 maven构建步骤(扩展)
在进行配置maven的构建选项前,先了解一下源码文件通过maven编译打包的过程:
首先,开发人员根据项目需要编写的pom.xml文件,pom.xml会详细地为maven指明编译打包过程的所需资源和步骤(例如打包类型、所需依赖...)。pom.xml文件参考:https://blog.csdn.net/qq_33363618/article/details/79438044
然后,maven会通过jenkins上配置的构建操作命令依据pom.xml文件完成编译打包。运维人员要负责的就是根据需要选择使用编译命令,并在jenkins配置好相关设置。
以下为常用的maven编译命令和区别:
~mvn clean 将以前编译得到的旧的 class 字节码文件删除
~mvn clean package依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
~mvn clean install依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。
~mvn clean deploy依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。
由上面的分析可知主要区别如下,
package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库
deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
原文:https://blog.csdn.net/zhaojianting/article/details/80324533
关于maven仓库:
默认本地仓库:通常在用户家目录的 ~/.m2/repository/ 路径下。最直接的配置库方式是在项目中的pom.xml文件中,通过<repositories>配置。
可以存放从远程库中下载到本地的部分构依赖构件、构建完成后的项目文件。
远程仓库:类似yum仓库的存在,为项目编译所需的依赖构件提供下载地址。
分公有仓库和私有仓库。可以自建私有库用来存放构件和构建完成后的项目文件。
阿里等大厂的仓库也属于自建的私有库,不过相对延迟较低,使用人群较多,属于公有库规模的私有库。
如果一个项目需要依赖一个构件,Maven编译的时候会首先从本地库查找该构件。如果本地库中没有,再根据配置的远程库信息,逐个去远程库中查找该构件。
5.构建后操作----将应用程序部署到 AWS CodeDeploy
6.构建后操作----可编辑的电子邮件通知
使用jenkins更强大的邮件通知功能,需要下载插件 Email Extension Plugin。然后
在系统设置中配置电子邮件通知功能
系统管理 --> 系统设置 --> Extended E-mail Notification