Jenkins

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 项目部署

检查

原文地址:https://www.cnblogs.com/yanshicheng/p/10689127.html