首页 > 其他 > 详细

CI/CD ansible+git+jenkins

时间:2020-07-21 12:47:10      阅读:75      评论:0      收藏:0      [点我收藏+]

ansible
git
jenkins


########################################
开发

运维的工作内容
1. 安装os
物理机:
虚拟机:阿里云
2. 安装程序、配置程序、启动程序
3. 监控与报警
4. 批量管理
5. 程序发布

运维工作的三个层面
1. 系统层面
虚拟机:template
物理机:pxe cobbler
2. 程序管理(安装、配置)
ansible
saltstack
puppet
chef
3. 批量管理
fabric
ansible

程序发布
开发-->运维-->部署到服务上
运维开发程序:简化程序发布的流程
docker

运维工作的两级化
1. 会开发、懂架构
2. 底层运维

预发布:
内部

灰度发布
先让一小部分用访问
然后主键扩大

将新版本连接到指定的目录下,一旦出现故障,可以迅速的修改软连接的指向,指向旧版本


灰度发布的流程
设置一部分主机处于维护模式
关闭服务
部署新版本的程序
启动服务
重新将这一部分主机添加到调度器的调度范围中

实现灰度发布
手动
自动
脚本
自动化发布平台---运维开发所开发的程序(python)

程序发布的原则
不能影响用户的访问
系统不能停机
新版程序有bug可以立刻恢复到之前版本


批量管理
有终端:puppet
无终端:ansible,fabric


ansible
批量管理工具
模块
python
无终端,是基于ssh实现管理的
也支持主从模式
也支持playbook

ansible使用
一、安装ansible
安装ansible
[root@ser1 ~]# wget http://172.20.223.181/7/epel/Packages/a/ansible-2.6.2-1.el7.noarch.rpm
[root@ser1 ~]# yum localinstall ansible-2.6.2-1.el7.noarch.rpm
[root@ser1 ~]# ansible --version

相关的文件
[root@ser1 ~]# rpm -qc ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts

二、生成密钥
[root@ser1 ~]# ssh-keygen -t rsa -P ""
[root@ser1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub ser1
[root@ser1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub ser2
[root@ser1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub ser3

测试
[root@ser1 ~]# ssh ser2 ip addr

三、使用ansible管理其他节点
格式:ansible <host> [options]
选项:
-m:指定模块名称
-a:指定模块的具体参数
-s:以sudo的方式运行操作
-i:指定被管理节点的主机列表
-f:一批连接几个主机进行操作(默认是5个主机)

查看ansible所支持的模块的信息
[root@ser1 ~]# ansible-doc -l
【默认用command模块】

查看一个模块的使用帮助
[root@ser1 ~]# ansible-doc -s 模块名
比如,查看command模块的帮助
[root@ser1 ~]# ansible-doc -s command


ansible被管理节点列表文件
/etc/ansible/hosts

定义被管理节点的时候,
可以单独基于主机做定义
也可以将多个主机定义成一个主机组

将两个被管理节点定义成一个主机组
[root@ser1 ~]# cp /etc/ansible/hosts{,.bak}
[root@ser1 ~]# vim /etc/ansible/hosts

添加一个主机组,如下
[webserver]
10.220.5.252
10.220.5.253


在管理节点通过ansible在被管理节点执行命令
格式:ansible 目标 -m command -a "命令"
说明:
目标:目标可以是一个主机组,也可以是hosts文件中的一个或者多个主机,也可是all
-m command:表示这次ansible操作是基于command模块实现
-a "命令":表示是在管理节点上要执行的命令


在webserver主机组中的所有主机上执行命令
[root@ser1 ansible]# ansible webserver -m command -a "hostname"
10.220.5.253 | SUCCESS | rc=0 >>
ser3

10.220.5.252 | SUCCESS | rc=0 >>
ser2

在所有主机上都执行
[root@ser1 ansible]# ansible all -m command -a "hostname"
10.220.5.252 | SUCCESS | rc=0 >>
ser2

10.220.5.253 | SUCCESS | rc=0 >>
ser3

在指定的主机上执行命令
[root@ser1 ansible]# ansible 10.220.5.252 -m command -a "hostname"
10.220.5.252 | SUCCESS | rc=0 >>
ser2


模块
1. command
默认模块
作用:在各个远程主机上执行命令,但是不能传递参数和变量

2. cron
作用:在指定的时间运行指定命令(计划任务)

例子:每隔2分钟再tmp下的log.txt中追加一个信息
[root@ser1 ~]# ansible all -m cron -a ‘minute="*/2" job="echo 123>>/tmp/log.txt" name="job1" state="present"‘
10.220.5.253 | SUCCESS => {
"changed": true,
"envs": [],
"jobs": [
"job1"
]
}
10.220.5.252 | SUCCESS => {
"changed": true,
"envs": [],
"jobs": [
"job1"
]
}


检查一下
[root@ser1 ~]# ansible all -a "crontab -l"
10.220.5.252 | SUCCESS | rc=0 >>
#Ansible: job1
*/2 * * * * echo 123>>/tmp/log.txt

10.220.5.253 | SUCCESS | rc=0 >>
#Ansible: job1
*/2 * * * * echo 123>>/tmp/log.txt


3. user
作用:管理用户

4. group
作用:管理用户组

5. copy
作用:文件的复制
子命令:
src:原文件路径
dest:目标文件路径
mode:指定权限
backup:有目标文件存在,先对原始文件做备份,然后进行覆盖
force:强制执行覆盖
owner:指定复制后的文件的属主
content:替代src,也就是将一段内存作为原,将这个内容直接写入到目标文件中

例子1:
[root@ser1 ~]# ansible all -m copy -a ‘src="/etc/passwd" dest=/tmp/passwd1 mode=777 owner=sshd‘

例子2
[root@ser1 ~]# ansible all -m copy -a ‘content="abcdef" dest=/tmp/passwd1 mode=777 owner=sshd‘

6. service
作用:管理服务
子命名;
name:指定服务的名称
enabled:指定服务是否开机自启动
state:指定服务最后的状态 started stopped reloaded restarted
runlevel:指定运行级别

例子:
# ansible all -a "systemctl status httpd"
# ansible all -m service -a "name=httpd state=started enabled=on"
# ansible all -a "ss -tnl"

7. ping
作用:做ping测试

例子:
[root@ser1 ~]# ansible all -m ping

8. file
作用:实现文件的各种管理操作
子命令:
follow:如果复制的文件是一个连接文件,那么复制以后,依然是连接文件,而且和原始文件一样,指向了相同的文件
force
group
mode
owner
path:指定目标路径(可以替代name\dest)
src
state

例子:
# ansible all -m file -a ‘state=touch path=/tmp/abc.def‘
# ansible all -m file -a ‘state=link src=/tmp/abc.def path=/tmp/abc.def.ln‘
# ansible all -m file -a ‘state=absent path=/tmp/abc.def‘
# ansible all -m file -a ‘force=on state=absent path=/tmp/‘
# ansible all -m file -a ‘force=on state=absent path=/tmp‘


9. shell
作用:类似于command,但是可以执行复杂的命令,可以变量

10. script
作用:将一个本地脚本传递到远程主机上,并运行

11. yum
作用:管理rpm包
子命令:
name:要操作的软件
state:present absent

12. setup
作用:收集和显示各个被监控节点的信息


#######################################################################

playbook

YAML脚本
可读性好
实现过程简单
可以方便的和比如shell进行交互
方便扩展


tom 的信息
姓名
年龄
配偶
子女

name:tom
age:20
spouse:
name:jerry
age:18
children:
- name:bajie
age:3
gender:M
- name:wukong
age:3
gender:F

YAML的数据类型
列表:(list)
用 - 来引导,表示多个相同类型的数据项

字典:(dictonary)
{name:bajie, age:3, gender:M}
{name:wukong, age:3, gender:F}


YAML中的变量
数字、字母、下划线,且只能以字母为开头

facts:
register:

YAML中的Inventory
Inventory file:/etc/ansible/hosts

格式:
主机:
host1
host2
主机组:
[组名]
host1
host2
...

标识主机名类似的主机
dns[00-99].qq.com

给主机传递变量
[webserver2]
10.220.5.123 http_port=80 Max_RquestPerChild=100
10.220.5.124 http_port=443

组变量
[webservers]
10.220.5.123
10.220.5.124

[webservers:var1]
http_port=80
Max_RquestPerChild=100

组嵌套
[web]
10.220.5.1
10.220.5.2

[db]
10.220.5.3
10.220.5.4

[server:myser]
web
db


编写playbook需要用到的组件
1. Iventory file
2. Moudles
3. actions(command)

playbook的构成
1. tasks 任务
2. variables 变量
3. templates 模版
4. handlers 处理器
5. roles

- host: webservers <<< 定义在inventory file中的主机或者主机组
vars: <<< 定义两个变量
http_port=80
Max_RquestPerChild=100
remote_user: root <<< 指定远程执行操作的用户
tasks:
- name: install httpd
yum: name=httpd state=present

- name: start httpd
service: name=httpd state=started
handlers:
- name: restart httpd
service: name=httpd state=restarted


remote_user:


- host: webs <<< 定义在inventory file中的主机或者主机组
vars: <<< 定义两个变量
http_port=80
Max_RquestPerChild=100
remote_user: root <<< 指定远程执行操作的用户
tasks:
- name: install httpd
yum: name=httpd state=present

- name: start httpd
service: name=httpd state=started
handlers:
- name: restart httpd
service: name=httpd state=restarted


- host: dbs <<< 定义在inventory file中的主机或者主机组
vars: <<< 定义两个变量
http_port=3306
remote_user: root <<< 指定远程执行操作的用户
tasks:
- name: install mysql-server
yum: name=mysqld-server state=present

- name: start mysqld
service: name=mysqld state=started
handlers:
- name: restart mysqld
service: name=mysqld state=restarted


###################################################
playbook中,当一个任务没有正常结束,那么其返回值不是0,那么后面的所有的操作不再执行

触发器(处理器)


- hosts: all
remote_user: root
tasks:
- name: install httpd
yum: name=httpd state=latest
notify:
- restart httpd
- name: start httpd
service: name=httpd state=started enabled=true
notify:
- restart httpd
- name: copy configure file
copy: src=/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify:
- restart httpd
handlers:
- name: restart httpd
service: name=httpd state=restarted


###########################################

定义变量
vars:
var1=value
var2=value
var3=value
...

使用变量
tasks:
{{ var1 }}


变量:
内置变量
自定义变量

自定义变量的实现方式
1. 直接写在yaml文件中
2. 在Inventory file中定义

 


- hosts: all
remote_user: root
vars:
- pkgname: mariadb-server
- sername: mariadb
tasks:
- name: install mysql
yum: name={{ pkgname }} state=present
- name: start mysql
service: name={{ sername }} state=started
- name: send my.cnf
copy: src=/my.cnf dest=/etc/my.cnf
notify:
- restart mysqld
handlers:
- name: restart mysqld
service: name={{ sername }} state=restarted


######################################


判断

仅仅在ip地址是10.220.5.252的主机上新建一个用户zhangsan

when: 判断条件


循环
with_items

item


模版
http
1
port:801
serverName:主机名
2
port:802
serverName:主机名

/tmp/xxx/xxx


tags


roles
代码的复用

创建角色流程
1. 创建目录 roles
2. 在roles目录中创建几个子目录,子目录的名称就是角色名称
3. 在各个角色名称目录下,创建一些目录:files handlers tasks vars templates
4. 在yaml文件中调用各个角色

文件
task:
templates
vars:


三组服务器
roles
webservers
dbservers
phpserver


yaml

hosts: webservers
roles:
- web

hosts: dbserver
roles:
- db

hosts: phpsever
roles:
- web
-db


两个角色
websrvs
dbsrvs

 

 

###############################################

svn

git
作用版本控制
分布式
工作过程是将服务器上的代码下载到本地,本地开发完成后,在提交到服务器端


安装
rpm
编译

 

编译安装过程
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

wget https://github.com/git/git/archive/v2.7.4.zip
unzip v2.7.4.zip
cd git-2.7.4

make prefix=/usr/local/git all
make prefix=/usr/local/git install
rm -rf /usr/bin/git
ln -s /usr/local/git/bin/git /usr/bin/git
git --version


git
通过版本库来记录各个版本信息的
版本控制是基于指针(HEAD)
修改HEAD制作有两种方式
1. HEAD^^
2. HEAD~2

git中创建版本
第一步:git add 文件名
第二步:git commit -m "描述信息"

 

简单演示
1. 创建一个文件
echo "123" >>a.txt

2. 创建第一个版本
git add a.txt
git commit -m "v1"

3. 修改文件
echo "12345" >>a.txt

4. 再创建第一个版本
git add a.txt
git commit -m "v2"

5. 查看版本日志
git log

6. 恢复到第一个版本
git reset --hard HEAD~1

7. 查看文件中的内容
cat a.txt

8. 查看v2版的id值
git reflog

9. 再次恢复到v2版本
git reset --hard v2的id值

 

工作区:编辑文件的哪个目录
暂存区:
主分支


撤销修改
checkout:删除在工作区中所做的修改
git reset HEAD 文件名:将暂存区中的数据删除,但是工作区中还有


数据回滚有三个选项
--hard:将工作区和咱存区中的内容都回滚到一个指定的版本状态
--soft:仅仅将版本库中的内容回滚到指定的版本,但是工作区和暂存区中的内容都不受影响
--mixed:默认选项,仅仅将暂存区中的内容回滚到一个指定版本,但是工作区的内容不受影响


练习:
修改一个文件,加入到暂存区
在修改一次(不加入暂存区)
将这两次修改回滚

 

git branch xxx
git branch
git checkout xxx


########################################
查看分支:
git branch

创建分支
git branch dev

修改指针指指向dev分支
git checkout dev

合并dev分支中提交的内容到当前分支
git merge dev

删除dev分支
git branch -d dev

冲突

fast forward
bug 分支


在线git仓库(github)
https://github.com/


git
gitlab
github


gitlab:ruby,内部代码管理平台,功能类似于github
集成:pgsql、nginx、redis...


安装gitlab的主机用至少2G的内存

 

gitlab的依赖
curl openssh-server openssh-clients policycoreutils postfix

安装gitlab
yum localinstall xxx.rpm

修改配置
# vim /etc/gitlab/gitlab.rb
external_url ‘http://10.220.5.251‘

让修改生效
# gitlab-ctl reconfigure


管理的命令
gitlab-ctl stop
gitlab-ctl start
gitlab-ctl restart

将gitlab中的项目代码拉取到本地
# git clone http://10.220.5.251/javaweb/javaweb.git


集成:
每个程序员每次将自己分支中的内容提交到主分支,并且进行编译,并测试,这一系列过程称之为一次集成


向gitlab推送
1. add
2. commit
3. git push origin 分支名

 

###################################################

playbook
roles

目录结构
xx.yaml
inventory
xxx
roles
staticser
tasks
main.yaml
include xxx
xxx.yaml
xxx.yaml
vars
main.yaml
files
templates
handlers

phpser
tasks
vars
files
templates
handlers


案例:一键部署httpd,并部署一个测试页,并检查部署结果的健康状态

规划
角色:webser
任务:
252 253安装httpd
指定运行端口87,根目录/var/www,域名为当前节点的IP地址,运行者身份是apache
部署一个测试页面(index.html)
检查是否部署成功

第一步:创建目录
[root@ser1 ~]# mkdir /project/{roles,inventory} -pv
[root@ser1 ~]# mkdir /project/roles/webser/{tasks,files,templates} -pv

[root@ser1 ~]# tree /project/


第二步:创建模版文件
[root@ser1 ~]# cp /etc/httpd/conf/httpd.conf /project/roles/templates/httpd.conf.j2
[root@ser1 ~]# vim /project/roles/templates/httpd.conf.j2

[root@ser1 ~]# grep "^[a-zA-Z]" /project/roles/templates/httpd.conf.j2
ServerRoot "/etc/httpd"
Listen {{ port }}
Include conf.modules.d/*.conf
User {{ user }}
Group {{ user }}
ServerAdmin root@localhost
ServerName {{ ansible_ens33.ipv4.address }}
DocumentRoot "{{ root }}"
ErrorLog "logs/error_log"
LogLevel warn
AddDefaultCharset UTF-8
EnableSendfile on
IncludeOptional conf.d/*.conf

变量:
{{ port }}
{{ user }}
{{ root }}

第三步:创建测试文件
[root@ser1 ~]# echo "<h1>test page</h1>">/project/roles/files/index.html

第四步:编写用于做健康检查的脚本
[root@ser1 ~]# cd /project/roles/files/
[root@ser1 files]# vim check.sh

#!/bin/bash

URL=$1
PORT=$2
curl -I http://$1:$2/index.html | grep "200 OK" &>/dev/null

if [ $? -eq 0 ];then
echo "$1 status is ok"
else
echo "$1 status is not ok"
fi

第五步:创建job
[root@ser1 /]# cd /project/roles/tasks/
[root@ser1 tasks]# vim main.yaml

- name: install httpd
yum: name=httpd state=present
- name: make configrantion file
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
- name: start httpd
service: name=httpd state=restarted
- name: install test page
copy: src=index.html dest={{ root }}
- name: make health check
shell: sh roles/webser/files/check.sh {{ ansible_ens33.ipv4.address }} {{ port }}
delegate_to: localhost
register: health_status
- debug: msg="{{ health_status.stdout }}"

第六步:创建清单文件
[root@ser1 ~]# cd /project/inventory/
[root@ser1 inventory]# vim webser

[webser]
10.220.5.252
10.220.5.253

第七步:创建入口文件
[root@ser1 ~]# cd /project/
[root@ser1 project]# cat webser.yaml <<< 该文件必须和roles目录同级
- hosts: all
remote_user: root
roles:
- webser

第八步:运行playbook
ansible-playbook -i ./inventory/webser ./webser.yaml -e port=99 -e user=apache -e root=/var/www

 

将本地目录中的内容发送到gitlab
方法1:
git clone xxxx
git add --all
git commit -m "ddd"
git push

方法2:
git init
git add --all
git commit -m "xxxx"
git remote add origin xxxxx
git pull xxxxx
git push


框架(目录结构)

 


作业:
1. 在gitlab中创建一个项目 nginx_auto
2. 编写playbook,实现一键部署nginx、部署一个静态测试页、测试部署结果
要求:
部署nginx
端口:83
运行身份:root
设置并发连接数:2048
主机名:当前节点的主机名
根目录:/vaw/www/html

其他要求:
部署两个以上节点
用role
用templates

3. 将写好的playbook保存到gitlab仓库中

 

#############################
案例:一键部署lamp+wordpress
251:ansible
252:测试(dev)
253:生产(prod)
232:gitlab


第一步:创建两个主机清单
[root@ser1 inventory]# pwd
/project/inventory
[root@ser1 inventory]# cat dev
[devser]
10.220.5.252

[devser:vars]
port=82
user=apache
root=/var/www
gitlab_user=root
gitlab_pass=11111111

[root@ser1 inventory]#
[root@ser1 inventory]# cat prod
[prodser]
10.220.5.253

[devser:vars]
port=82
user=apache
root=/var/www
gitlab_user=root
gitlab_pass=11111111

第二步:创建两个角色目录
[root@ser1 roles]# pwd
/project/roles
[root@ser1 roles]# ls
devser prodser

第三步:创建php测试页面
[root@ser1 files]# pwd
/project/roles/devser/files

[root@ser1 files]# cat index.php
<?php
phpinfo();
?>

第四步:创建健康检查脚本
[root@ser1 files]# pwd
/project/roles/devser/files

[root@ser1 files]# cat check.sh
#!/bin/bash

URL=$1
PORT=$2
curl -I http://$1:$2/index.php | grep "200 OK" &>/dev/null

if [ $? -eq 0 ];then
echo "$1 status is ok"
else
echo "$1 status is not ok"
fi

第五步:创建httpd模版文件
略-同之前

第六步:创建任务文件
[root@ser1 tasks]# pwd
/project/roles/devser/tasks

[root@ser1 tasks]# cat main.yaml
######## 安装 httpd php mysql ###############
- name: install httpd
yum: name=httpd state=present
- name: install mysql
yum: name=mariadb-server state=present
- name: install php
shell: "yum install php php-mysql -y"

######## 配置httpd #########################
- name: make configrantion file
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf

- name: install test page
copy: src=index.php dest={{ root }}

######## 启动服务 ####################
- name: start httpd
service: name=httpd state=restarted
- name: start mysql
service: name=mariadb state=started

######### 检查部署结果是否正常 ##########
- name: make health check
shell: sh roles/devser/files/check.sh {{ ansible_ens33.ipv4.address }} {{ port }}
delegate_to: localhost
register: health_status
- debug: msg="{{ health_status.stdout }}"

########## 从gitlab拉取代码 #################
- name: backup old files
shell: "mv {{ root }} {{ backup_to }}"

- name: close ssl authtication
shell: "git config --global http.sslVerify false"

- name: git clone wordpress from gitlab
git: "repo=http://{{ gitlab_user }}:{{ gitlab_pass }}@10.220.5.232/gp1/wordpress.git dest={{ root }} version=master"


第七步:创建入口文件

[root@ser1 ~]# vim /project/dev.yaml
- hosts: devser
remote_user: root
vars:
backup_to: "{{ root }}_{{ ansible_date_time.epoch }}"
roles:
- devser


第八步:一键部署wordpress
[root@ser1 ~]# cd /project/
[root@ser1 project]# ansible-playbook -i ./inventory/$type dev.yaml -e type=dev

 

########################################################

git(gitlab)
ansible
jenkins

持续集成
持续集成:Continuous Intergration (CI)
持续交付:Continuous Delivery(CD)
持续部署:Continuous Deployment(CD)

持续集成流程
1. 提交(git)
2. 测试
3. 构建(jenkins)
4. 测试
5. 部署(ansile,shell,puppet)
6. 回滚(ansile)

jenkins
用java集成工具
可以将运维用到的各个脚本整合起来,并且可以通过页面方式集中管理,而且可以也可以实现和gitlab、github交互,也可以实现自动编译、部署程序


下载jenkins
pkg.jenkins.io


安装jenkins
注意:关闭selinux iptables

安装java环境
# yum install java -y
# rpm -ivh jenkinx-verion.rpm

启动jenkins
# systemctl start jenkins

 

注意:安装jenkins会卡在安装界面
原因:当前主机尝试连接jenkins官方站点,但是无法连接上
解决:断开当前主机的网络连接


获取jenkins的插件
方式1:找一个可以联网的主机,自动下载插件,然后导出插件
方式2:手动下载插件(updates.jenkins-ci.org)

导入插件
# tar xvf plugins-2.138.3.tar.gz
# cp plugins/* /var/lib/jenkins/plugins/ -a
# chown jenkins.jenkins /var/lib/jenkins/plugins
# systemctl restart jenkins

手动安装插件

 

jenkins中能完成的工作称之为job
freestyle
pipline


pipline的基本概念
stage:一个pipline可以分为多个stage,每个stage包含一组操作
node:一个node就是一个jenkis服务器(master agent slave)
setp:具体要执行的一个操作


简单配置jenkins
1)保证可以解析其他主机名

2)基础环境软件
# yum install git curl

3)关闭ssl认证
# git config --global http.sslVerify false


设置git 插件
设置注册git的用户和邮箱


设置凭据(连接gitlab的帐号和密码)

 

创建freestyle job

 


jenkins的集成
shell
参数
gitlab
maven
ansible
php

 

###########################################

pipline job

层级结构
第一层:pipline,这是最外层
第二层:stages,这层是用来完成一个特定的工作,其中有一个或者多个子层,每个子层是一个stage
第三册:stage,这是stages的子层
第四层:steps,这层是定义具体要执行的操作


pipline {
agent any;
environment {
user=‘deploy‘
host=‘1.2.3.4‘
PATH=‘/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin‘
}
stages {
stage(‘bulid job‘) {
environment {
NEWPATH=‘/bin:/sbin‘
}
steps {
sh ‘/home/a.sh‘
echo "hi boys"
script{
xxxx
xxxx
}
}
}
}
}


区域:
agent:定义当前的job运行在哪个jenkins节点上
any:
none:
node:

agent {node {label ‘ser1‘}}
agent any

environment:定义环境变量
格式:变量名=变量值

script:可选的

steps:借助于特定的jenkis模块来完成特定的工作
echo
sh
git

 

pipeline任务案例:


pipeline{
agent {node {label ‘master‘}}
environment {
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
}

parameters{
choice(
name: "deploy_env",
choices: "dev\nprod",
description: "this is for liang lei xi tong"
)
string(name: ‘version‘,defaultValue: ‘1.0.0‘, description: ‘版本号‘)
}

stages {
stage("test for pipline job"){
steps{
sh "git config --global http.sslVerify false"
dir ("${env.WORKSPACE}"){
git branch:‘master‘,
url:‘http://10.220.5.232/gp1/wordpress.git‘,
credentialsId:‘119a7e29-4c6c-4f75-bfdb-56fa0edcafaa‘
}
}
}
stage("print bianlian"){
steps{
sh """
set +x
echo "===============start job=============="
echo "你选的类型是 $deploy_env"
echo "your version is $version"
echo "===============stop job =============="
set -x
"""
}
}
}
}


###############################################

基于jenkis实现一键部署静态页面和wordress

 

案例1:一键部署httpd和静态页面

模拟两个环境
测试:dev
生产:prod

准备工作
1. 检查ansible是否正常工作

2. 关闭ssl认证

3. 下载playbook框架
gti clone http://10.220.5.232/gp1/http_playbook.git

[root@ser1 ~]# tree http_playbook/
http_playbook/
├── inventory
│   └── webser
├── readme
├── roles
│   └── webser
│   ├── files
│   │   ├── check.sh
│   │   └── index.html
│   ├── tasks
│   │   └── main.yaml
│   └── templates
│   └── httpd.conf.j2
├── webser.retry
└── webser.yaml

 

 

#!groovy

pipeline {
agent {node {label ‘master‘}}

environment {
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"
}

parameters {
choice(
choices: ‘dev\nrprod‘,
description: ‘Choose deploy environment‘,
name: ‘deploy_env‘
)
string (name: ‘branch‘, defaultValue: ‘master‘, description: ‘Fill in your ansible repo branch‘)
}

stages {
stage ("Pull deploy code") {
steps{
sh ‘git config --global http.sslVerify false‘
dir ("${env.WORKSPACE}"){
git branch: ‘master‘, credentialsId: ‘119a7e29-4c6c-4f75-bfdb-56fa0edcafaa‘, url: ‘http://10.220.5.232/gp1/wordpress_playbook.git‘
}
}

}

stage ("Anisble deployment") {
steps {
input "Do you approve the deployment?"
dir("${env.WORKSPACE}"){
echo "[INFO] Start deployment"
sh """
set +x
ansible-playbook -i inventory/$env ./dev.yaml -e branch=$branch -e env=$deploy_env
set -x
"""
echo "[INFO] Deployment finished..."
}
}
}

}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

credentialsId

 

 

 

 


全网数据备份
mysql高可用
基于redis缓存实现LAMP
rsync+inotify+nfs+web
用户权限集中管理及操作审计
持续集成项目
基于docker实现lamp的动静分离

 

CI/CD ansible+git+jenkins

原文:https://www.cnblogs.com/fatzi/p/13353510.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!