CI/CD, DevOps介绍
持续集成 CI: 代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈.
持续交付 CD: 部署到生产环境,给用户使用
持续部署 CD: 部署到生产环境.
部署GIT (GIt版本控制服务器)
~]# yum install git -y ~]# useradd git ~]# passwd git ~]# su git ]$ cd ~]$ mkdir repos ~]$ cd repos/ ]$ mkdir app.git ]$ cd app.git/ ]$ git --bare init 初始化空的 Git 版本库于 /home/git/repos/app.git/ ]$ ls -a . .. branches config description HEAD hooks info objects refs
测试服务器 clone 代码
]# ssh-keygen ]# ssh-copy-id git@172.16.0.41 ~]# mkdir test1 ~]# cd test1 ]# git clone git@172.16.0.41:/home/git/repos/app.git
Jenkins
安装 jdk and maven
jdk 官网: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
maven下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.0/binaries/
jdk 安装
wget https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz tar xf jdk-8u201-linux-x64.tar.gz -C /usr/local/ mv jdk1.8.0_201/ jdk1.8 vim /etc/profile export JAVA_HOME=/usr/local/jdk1.8 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH source /etc/profile java -version java version "1.8.0_201" Java(TM) SE Runtime Environment (build 1.8.0_201-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
maven 安装
cd /usr/local/ wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz tar xf apache-maven-3.6.0-bin.tar.gz mv apache-maven-3.6.0/ maven3.6 vim /etc/profile export PATH="/usr/local/maven3.6/bin:$PATH" source /etc/profile mvn -v Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00) Maven home: /usr/local/maven3.6 Java version: 1.8.0_201, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-957.1.3.el7.x86_64", arch: "amd64", family: "unix"
Jenkins 安装
官网: https://jenkins.io/
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key yum install jenkins
修改配置
1) 修改/var/lib/jenkins/updates/default.json google改为www.baidu.com 2) 修改/var/lib/jenkins/hudson.model.UpdateCenter.xml 改地址默认jenkins默认为:https://updates.jenkins.io/update-center.json,改为http 3) 可能要修改 /etc/init.d/jenkins 指定jdk 路径 candidates=" /usr/local/jdk1.8/bin/java "
Jenkins 配置 jdk 和 maven(全局工具配置)
用户权限管理
插件: Role-based Authorization Strategy
系统管理 --> 插件管理 进行安装
系统管理 --> 全局安全配置 --> 授权策略
系统管理 --> Manage and Assign Roles
添加 全局管理角色组 user 只有读取权限
配置项目角色
创建项目名称 : testB
正则匹配项目 符合B.* 所有的项目都会匹配到
权限: 构建 取消 读取 读取工作空间
测试用户权限
全局安全配置,允许用户注册
分配角色权限
添加刚刚注册的用户指定相应的权限,即可登录 jenkins
分配指定的项目
可以添加视图管理项目
参数化构建
插件: Extended Choice Parameter 与 Git Parameter
自带的参数化构建
项目 --> 配置 --> 构建(执行 shell ) --> 立即构建 --> 查看控制台输出
参数化构建
构建过程中可以传参
安装扩展参数化构建插件
安装Git插件
修改配置文件
~]# vim /etc/sysconfig/jenkins JENKINS_USER="root" ~]# systemctl restart jenkins
Master-Slave架构
系统管理 -->> 管理节点 -->> 新建节点 -->>
成功在线
选择应用 slave 节点
Jenkins 流水线(Pipeline)
创建 pipeline-test
流水线自定义脚本(可以点击 流水线语法 进行定义脚本)
使用 git 存储脚本
# git 服务器操作 [git@test-node1 ~]$ cd repos/ [git@test-node1 repos]$ mkdir jenkinsfile [git@test-node1 repos]$ cd jenkinsfile/ [git@test-node1 jenkinsfile]$ git --bare init 初始化空的 Git 版本库于 /home/git/repos/jenkinsfile/ # 编写脚本上传服务器 [root@mysql-master ~]# git clone git@172.16.0.41:/home/git/repos/jenkinsfile 正克隆到 'jenkinsfile'... warning: 您似乎克隆了一个空版本库。 [root@mysql-master ~]# cd jenkinsfile/ [root@mysql-master jenkinsfile]# vim jenkinsfile node { // def mvnHome stage('checkout') { // for display purposes // Get some code from a GitHub repository checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'git@172.16.0.41:/home/git/repos/app.git']]]) //git 'https://github.com/jglick/simple-maven-project-with-tests.git' // Get the Maven tool. // ** NOTE: This 'M3' Maven tool must be configured // ** in the global configuration. //mvnHome = tool 'M3' } stage('mven Build') { // Run the maven build echo '1111' } stage('deploy') { echo 'deploy OK' } stage('test'){ echo 'test' } } [root@mysql-master jenkinsfile]# git add . [root@mysql-master jenkinsfile]# git commit -m 'jenkinfile' [master(根提交) b30531f] jenkinfile 1 file changed, 23 insertions(+) create mode 100644 jenkinsfile [root@mysql-master jenkinsfile]# git push origin master Counting objects: 3, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 626 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@172.16.0.41:/home/git/repos/jenkinsfile * [new branch] master -> master
项目配置 (脚本路径 就是自定义的 jenkinsfile 名字)
邮件通知
插件: Email Extension Plugin
应用案例
自动发布php项目
插件: Maven Lntegration plugin
数据准备
# git 服务器 su git cd cd repos/ ]$ ls appgit app.git mkdir wordpress cd wordpress/ git --bare init 初始化空的 Git 版本库于 /home/git/repos/wordpress/ # test机器: wget https://cn.wordpress.org/latest-zh_CN.tar.gz tar zxvf latest-zh_CN.tar.gz cd wordpress/ git init git remote add origin git@172.16.0.41:/home/git/repos/wordpress git add . git commit -m 'all' git push origin master
搭建 lnmp 环境并且(略)
jenkinsfile git 仓储 上传 jenkinsfile 文件
[root@mysql-master jenkinsfile]# cat jenkinsfile-php node ("slave1-172.16.0.40") { stage('git checkout') { checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'git@172.16.0.41:/home/git/repos/wordpress']]]) } stage('code copy') { sh '''rm -rf ${WORKSPACE}/.git mv /usr/share/nginx/html/test.wp /data/backup/test.wp-$(date +"%F_%T") cp -rf ${WORKSPACE} /usr/share/nginx/html/test.wp ''' } stage('test') { sh "curl http://172.16.0.40/status.html" } } [root@mysql-master jenkinsfile]# git add . [root@mysql-master jenkinsfile]# git commit -m 'file-php' [master c7b0608] file-php 1 file changed, 14 insertions(+) create mode 100644 jenkinsfile-php [root@mysql-master jenkinsfile]# git push origin master Counting objects: 4, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 599 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To git@172.16.0.41:/home/git/repos/jenkinsfile b30531f..c7b0608 master -> master
jenkins 项目部署
检查