Jenkins自动化CI&CD流水线
1 环境说明
主机名称 | IP | cpu核数/内存/硬盘 | 安装软件 | 用途 |
---|---|---|---|---|
controlnode | 172.16.1.120 | 2/2/60 | git | 代码仓库 |
slavenode1 | 172.16.1.121 | 2/2/60 | jenkins、jdk | jenkins主节点 |
slavenode2 | 172.16.1.122 | 2/2/60 | jdk、maven、tomcat | jenkins从节点2(用于构建和部署java程序) |
slavenode3 | 172.16.1.123 | 2/2/60 | jdk、lnmp环境 | jenkins从节点3(用于部署php程序) |
2 CICD DevOps介绍
3 安装jenkins
在 172.16.1.121 节点上操作
Jenkins官方文档地址:https://www.jenkins.io/download/
3.1 配置jenkins yum源
# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
3.2 安装
# yum install jenkins -y
由于是国外的源安装可能会很慢,可以下载阿里云上的 rpm 进行安装
https://mirrors.aliyun.com/jenkins/redhat-stable/jenkins-2.235.2-1.1.noarch.rpm
3.3 配置java环境
# tar -xzf jdk-8u45-linux-x64.tar.gz
# mv jdk1.8.0_45/ /usr/local/jdk
# sed -i.ori '$a export JAVA_HOME=/usr/local/jdk\nexport CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar\nexport PATH=$JAVA_HOME/bin:$PATH' /etc/profile
# source /etc/profile
# ln -s /usr/local/jdk/bin/java /usr/bin/java
或
vim /etc/init.d/jenkins
/usr/bin/java => /usr/local/jdk/bin/java
3.4 设置jenkins运行用户为root
# vim /etc/sysconfig/jenkins
JENKINS_USER="root"
3.5 启动jenkins服务
# systemctl start jenkins
# systemctl enable jenkins => chkconfig jenkins on
3.6 配置jenkins
1 在浏览器中通过 http://172.16.1.121:8080/ url进行访问
2 解锁jenkins
# tailf /var/lib/jenkins/secrets/initialAdminPassword
e5599334d1884634a910a0cbf2279b65
3 跳过插件安装
4 创建用户和密码
5 配置jenkins url地址
6 jenkins安装完成
7 更新 jenkins 插件地址如下
http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
或
http://updates.jenkins.io/update-center.json
此时会在/var/lib/jenkins/目录下生成一个updates目录
修改插件下载路径
# cd /var/lib/jenkins/updates/
# sed -i.bak 's/http:\/\/updates.jenkins-ci.org\/download/http:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
# sed -i.bak 's/http:\/\/www.google.com/http:\/\/www.baidu.com/g' default.json
# systemctl restart jenkins.service
8 安装插件
参数构建化过程插件:Build With Parameters Persistent Parameter
参数构建插件:Extended Choice Parameter、Git Parameter、邮件插件:Email Extension
权限管理插件:Role-based Authorization Strategy、中文插件:Localization: Chinese (Simplified)
git插件:Git、Maven插件:Maven Integration、jenkins主从代理插件:SSH Build Agents、
工作空间清理:Workspace Cleanup、流水线插件:Pipeline
4 jenkins从节点2安装配置
在 172.16.1.122 节点上操作
安装 unzip,不然后面的pipeline脚本会报错,提示“No zipfiles found.”
# yum install unzip -y
4.1 安装jdk
# tar -xzf jdk-8u45-linux-x64.tar.gz
# mv jdk1.8.0_45/ /usr/local/jdk
# sed -i.ori '$a export JAVA_HOME=/usr/local/jdk\nexport CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar\nexport PATH=$JAVA_HOME/bin:$PATH' /etc/profile
# source /etc/profile
4.2 安装maven
# tar -xzf apache-maven-3.5.3-bin.tar.gz
# mv apache-maven-3.5.3/ /usr/local/maven
# sed -i.ori '$a export MAVEN_HOME=/usr/local/maven\nexport PATH=$MAVEN_HOME/bin:$PATH' /etc/profile
# source /etc/profile
# mvn -v
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T03:49:05+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_45, vendor: Oracle Corporation
Java home: /usr/local/jdk/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"
修改maven构建时所需软件包的下载源
# vim /usr/local/maven/conf/settings.xml +158
<mirror> <id>central</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>https://maven.aliyun.com/repository/public</url>
</mirror>
4.3 安装tomcat
# tar -xzf apache-tomcat-8.5.31.tar.gz
# mv apache-tomcat-8.5.31/ /usr/local/tomcat
# rm -rf /usr/local/tomcat/webapps/*
# mkdir -p /usr/local/tomcat/webapps/ROOT
# echo "ok" >/usr/local/tomcat/webapps/ROOT/status.html
# /usr/local/tomcat/bin/startup.sh
# http://172.16.1.122:8080/status.html
5 jenkins从节点3安装配置
在 172.16.1.123 节点上操作
5.1 安装lnmp环境
# yum install nginx php-mysql php-fpm mariadb-server -y
# systemctl start php-fpm.service
# systemctl enable php-fpm.service
# systemctl start mariadb.service
# systemctl enable mariadb.service
增加配置
# 注释掉 /etc/nginx/nginx.conf 中的 server 配置项,然后按如下操作进行
# vim /etc/nginx/conf.d/www.conf
server {
listen 80;
server_name localhost; location / {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
} location ~ \.(html|css|js|jpg|png|gif)$ {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# rm -rf /usr/share/nginx/html/*
# echo '<?php phpinfo(); ?>' >/usr/share/nginx/html/status.php
# systemctl start nginx.service
# systemctl enable nginx.service
# http://172.16.1.123/status.php
5.2 安装 jdk
# tar -xzf jdk-8u45-linux-x64.tar.gz
# mv jdk1.8.0_45/ /usr/local/jdk
# sed -i.ori '$a export JAVA_HOME=/usr/local/jdk\nexport CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar\nexport PATH=$JAVA_HOME/bin:$PATH' /etc/profile
# source /etc/profile
6 配置 jenkins 连接从节点
6.1 为从节点添加凭据
Manage Jenkins—>Manage Credentials—>添加凭据
6.2 连接 jenkins从节点2(172.16.1.122)
Manage Jenkins—>Manage Nodes and Clouds—>新建节点
1 创建代理
2 配置代理相关参数
3 启动代理
4 启动成功
5 在节点上验证
# ps -ef | grep jar
root 5844 5798 0 18:44 ? 00:00:00 bash -c cd "/var/lib/jenkins" && /usr/local/jdk/bin/java -jar remoting.jar -workDir /var/lib/jenkins -jar-cache /var/l
ib/jenkins/remoting/jarCacheroot 5851 5844 8 18:44 ? 00:00:06 /usr/local/jdk/bin/java -jar remoting.jar -workDir /var/lib/jenkins -jar-cache /var/lib/jenkins/remoting/jarCache
root 5964 2184 0 18:45 pts/1 00:00:00 grep --color=auto jar
6.3 连接 jenkins从节点3(172.16.1.123)
7 安装 git
在 172.16.1.120 节点上操作
7.1 创建仓库
1、安装Git
# yum install git -y
2、创建git用户并设置密码
# useradd git
# echo "123456" | passwd --stdin git
3、创建仓库
# su - git
$ mkdir -p repos/java-item.git
$ mkdir -p repos/php-item.git
$ mkdir -p repos/pipeline-scripts.git
$ git init --bare repos/java-item.git/
$ git init --bare repos/php-item.git/
$ git init --bare repos/pipeline-scripts.git/
$ su - root
# mkdir -p /tools && cd /tools/
7.2 向git仓库推送数据
1、配置ssh
# ssh-keygen
# ssh-copy-id -p 22 git@172.16.1.120
# git config --global user.email "you@example.com"
# git config --global user.name "Your Name"
2、提交java代码
# git clone git@172.16.1.120:/home/git/repos/java-item.git
# 上传maven构建的java源码包,解压后移动到java-item目录下
# cd java-item/
# git add .
# git commit -m "all"
# git push origin master
3、提交php代码
# git clone git@172.16.1.120:/home/git/repos/php-item.git
# 上传wordpress的源码包,解压后移动到php-item目录下
# cd php-item/
# git add .
# git commit -m "all"
# git push origin master
4、提交pipeline脚本
# git clone git@172.16.1.120:/home/git/repos/pipeline-scripts.git
# cd pipeline-scripts
# 将Jenkinsfile-java、Jenkinsfile-php脚本上传到pipeline-scripts目录下
# git add .
# git commit -m "all"
# git push origin master
7.3 Jenkinsfile-java 脚本
node ("tomcat(172.16.1.122)") {
//def mvnHome = '/usr/local/maven'
stage('git checkout') {
checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'git@172.16.1.120
:/home/git/repos/java-item.git']]]) } stage('maven build') {
sh '''
JAVA_HOME=/usr/local/jdk
PATH=$JAVA_HOME/bin:/usr/local/maven/bin:$PATH
mvn clean package -Dmaven.test.skip=true
'''
} stage('deploy') {
sh '''
JENKINS_NODE_COOKIE=dontkillme
TOMCAT_NAME=tomcat
TOMCAT_HOME=/usr/local/$TOMCAT_NAME
WWWROOT=$TOMCAT_HOME/webapps/ROOT
BACKUP_DIR=/data/backup [ ! -d $BACKUP_DIR ] && mkdir -p $BACKUP_DIR
[ -d $WWWROOT ] && mv $WWWROOT $BACKUP_DIR/${TOMCAT_NAME}-$(date +"%F_%T")
unzip ${WORKSPACE}/target/*.war -d $WWWROOT
PID=$(ps -ef |grep $TOMCAT_NAME |egrep -v "grep" |awk 'NR==1{print $2}')
[ -n "$PID" ] && kill -9 $PID
/bin/bash $TOMCAT_HOME/bin/startup.sh
'''
} stage('test') {
sh '''
sleep 5
curl http://172.16.1.122:8080
'''
} }
7.4 Jenkinsfile-php 脚本
node ("php(172.16.1.123)") {
stage('git checkout') {
checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'git@172.16.1.120
:/home/git/repos/php-item.git']]]) } stage('code copy') {
sh '''
WWWROOT=/usr/share/nginx/html
BACKUP_DIR=/data/backup [ ! -d $BACKUP_DIR ] && mkdir -p $BACKUP_DIR
[ -d $WWWROOT ] && mv $WWWROOT $BACKUP_DIR/PHP-$(date +"%F_%T")
rm -rf ${WORKSPACE}/.git
cp -a ${WORKSPACE} $WWWROOT
chown -R apache.apache $WWWROOT
'''
} stage('test') {
sh '''
sleep 5
curl http://172.16.1.123/
'''
} }
7.5 所有节点和 git 仓库建立 ssh 密钥验证登陆
分别在 172.16.1.121、172.16.1.122、172.16.1.123 上执行如下命令
# ssh-keygen
# ssh-copy-id -p 22 git@172.16.1.120
8 Jenkins+Pipeline+Java
1 创建项目
2 设置构建参数
3 流水线参数配置
4 构建项目
5 构建视图
6 访问网站
9 Jenkins+Pipeline+Maven+PHP
1 创建项目
2 设置构建参数
3 流水线参数配置
4 构建项目
5 构建视图
6 访问网站
10 用户权限设置
1 开启允许用户注册功能和 启用 Role-Based Strategy 插件
Manage Jenkins—>Configure Global Security
2 新建两个项目分别时 A-item、B-item
3 分别注册两个用户userA、userB
4 新建用户角色和项目角色
Manage Jenkins—>Manage and Assign Roles—>Manage Roles
5 将用户赋予用户角色和项目角色上
Manage Jenkins—>Manage and Assign Roles—>Assign Roles
6 userA用户登陆
7 userB用户登陆
11 补充
1 git
git remote -v
git remote rm origin
git remote add origin git@172.16.1.120:/home/git/repos/pipeline-scripts.git
2 参数化构建
项目构建参数配置
构建项目时可见选项
3 邮箱设置
Manage Jenkins—>Extended E-mail Notification
下面是全局邮箱服务设置,在项目构建完成后也可指定动作发送邮件
Jenkins自动化CI&CD流水线的更多相关文章
- Jenkins自动化CI CD流水线之1--介绍与安装
第1章 大纲 CI/CD, DevOps介绍 Git安装与使用 Jenkins安装与使用 权限管理 参数化构建 Master-Slave 流水线(Pipeline) 邮件通知 应用案例 自动发布PHP ...
- Jenkins自动化CI CD流水线之8--流水线自动化发布Java项目
一.前提 插件:Maven Integration plugin 环境: maven.tomcat 用的博客系统代码: git clone https://github.com/b3log/solo. ...
- Jenkins自动化CI CD流水线之5--pipeline
一.概览 二.安装 在对jenkins进行初始化安装时,默认已经安装了jenkins的相关插件,如下图所示: 三.实操 新建任务: 编写pipeline脚本: 我们可以借助流水线语法去做. test流 ...
- Jenkins自动化CI CD流水线之4--Master-Slave架构
一.介绍 jenkins的Master-slave分布式架构主要是为了解决jenkins单点构建任务多.负载较高.性能不足的场景. Master/Slave相当于Server和agent的概念.Mas ...
- Jenkins自动化CI CD流水线之3--参数化构建
一. 背景 如果只是简单的构建,jenkins自己默认的插件可以做,但是如果我们想要在构建过程中有更多功能,比如说:选择性构建.传参.项目指定变量等等其他功能,基础的参数化构建可以实现一些简单功能,但 ...
- Jenkins自动化CI CD流水线之7--流水线自动化发布PHP项目
一.前提 环境为:lnmp PHP项目:wordpress(此处我们下载一个wordpress的源码.将其模拟为我们的代码上传到我们的git仓库) 二.配置 1)创建job 2)参数化构建 3)配置p ...
- Jenkins自动化CI CD流水线之6--构建邮件状态通知
一. 前提 前提: 服务器开启邮箱服务: 二. 基础配置 需要安装一个插件: 插件: Email Extension Plugin 进行配置: 系统管理->系统设置-> 相关配置如下图: ...
- Jenkins自动化CI CD流水线之2--用户权限管理
一. 背景 针对开发.运维.测试针对不同角色进行不同权限划分, 基于插件: Role-based Authorization Strategy来实现. 一. 安装 安装该插件: 系统管理->管理 ...
- Docker: Jenkins与Docker的自动化CI/CD流水线实战
什么是CI/CD 持续集成(Continuous Integration,CI):代码合并.构建.部署.测试都在一起,不断地执行这个过程,并对结果反馈.持续部署(Continuous Deployme ...
随机推荐
- WPS 2010 页眉下方添加下划线
我们在使用Word2010编辑文档中时,有时需要在页眉下方删除或添加一条横线.本篇经验就来介绍一下删除和添加横线的方法. 工具/原料 Word 2010 一.删除横线 1 打开Word2010 ...
- K8S的资源管理
K8S的资源管理 管理K8S资源的三种基本方法: 陈述式资源管理方法-使用cli工具进行管理. 声明式资源管理方式-主要依耐资源配置清单. GUI式资源管理方法-主要依耐图形界面. 陈述式资源管理方法 ...
- java 并发包JUC下的CountDownLatch和CyclicBarrier的理解和区别
推荐这篇帖子,讲得不错~ https://blog.csdn.net/liangyihuai/article/details/83106584
- Python中字符串转换列表
前言:在使用Python完成工作中一些任务的时候,常常要对数据类型进行转换,比如字符串转列表,列表转字符串,字符串转元组等等,下面分享一下常用的字符串转列表 字符串转列表 第一种字符串转列表: t_s ...
- 面试官问我:如何在 Python 中解析和修改 XML
摘要:我们经常需要解析用不同语言编写的数据.Python提供了许多库来解析或拆分用其他语言编写的数据.在此 Python XML 解析器教程中,您将学习如何使用 Python 解析 XML. 本文分享 ...
- VMware Cloud Foundation 4.2 发布 - 领先的混合云平台
VMware Cloud Foundation 4.2 | 09 FEB 2021 | Build 17559673 VMware Cloud Foundation 4.1 | 06 OCT 2020 ...
- python基础课程讲解
day01: 编程语言的介绍: 一 1.什么是编程?(****) 两个环节: 1.把做事的思维逻辑给想清楚了 2.用计算机能听懂的语言也就是编程语言把做事的步骤给翻译下来 2.为什么要编程? 人要奴役 ...
- 十一、.net core(.NET 6)搭建ElasticSearch(ES)系列之ElasticSearch、head-master、Kibana环境搭建
搭建ElasticSearch+Kibana环境 前提条件:已经配置好JDK环境以及Nodejs环境.如果还未配置,请查看我的上一篇博客内容,有详细配置教程. 先下载ElasticSearch(以下文 ...
- Go语言网络通信---多用户连续通信的TCP编程
server端: package main import ( "fmt" "net" ) func main() { //建立监听 listener, err ...
- Go语言介绍(背景、特点)
一.go语言的背景 Go是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go(又称 Golang)是 Google 的 Rob Pike(罗勃.派克),Ken Thompson(肯· ...