server configuration
hostname | ip |
jenkins | 133 |
git | 129 |
project | 134 |
- jenkins和ansible装在一台机器上,jenkins去调用ansible,ansible去对后端服务器进行操作,让后端服务器自己去拉取代码
- gti机子为我们的一个代码仓库,代码就是从这上面进行拉取的
- project机子上装的tomcat和nginx,用来做参数化构建被控端的机子
整体思路
新建任务
构建一个自由风格的项目
选择参数化构建过程
添加选项参数
选择要上线的服务
再添加选项参数
选择服务的状态
又一次添加选项参数
要拉取代码还是要回滚老版本
添加字符参数
上边定义了reset-id ,可以给reset-id进行赋值
添加一个构建步骤
构建后会先选择参数,
将选择的参数在控制台进行输出
应用并保存,然后去进行构建
与我刚才选择的一致,测试成功
下面去project的机器上进行操作
机器上已经预装好了nginx和tomcat
先去nginx的网站发布目录下去将html目录进行删除
[root@project ~]# cd /usr/share/nginx/
[root@project nginx]# ll
总用量 0
drwxr-xr-x. 3 root root 136 11月 23 21:13 html
drwxr-xr-x. 2 root root 6 11月 11 2022 modules
[root@project nginx]# rm -rf html
[root@project nginx]#
设置project的免密登录,将project的公钥发给gitlab
测试一下能不能免密克隆下来
[root@project ~]# yum -y install git
[root@project ~]# git clone git@192.168.43.129:dog_wangwang/nginx-parameter.git
正克隆到 'nginx-parameter'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (6/6), done.
克隆成功,然后将刚才克隆下来的移动到/usr/share/nginx下,并改名html
[root@project ~]# ll
总用量 543892
-rw-------. 1 root root 1241 10月 19 09:02 anaconda-ks.cfg
-rw-r--r--. 1 root root 10771165 11月 21 17:42 apache-tomcat-8.5.95.tar.gz
-rw-r--r--. 1 root root 169440335 11月 23 10:24 jdk-11.0.19_linux-x64_bin.tar.gz
-rw-r--r--. 1 root root 181719178 11月 2 11:43 jdk-17_linux-x64_bin.tar.gz
-rw-r--r--. 1 root root 194990602 11月 23 10:06 jdk-8u211-linux-x64.tar.gz
-rw-r--r--. 1 root root 888 10月 21 15:43 my_static_ip.sh
drwxr-xr-x. 3 root root 53 11月 23 21:33 nginx-parameter
-rwxr-xr-x. 1 root root 1208 11月 23 21:13 yum-server.sh
[root@project ~]# mv nginx-parameter/ /usr/share/nginx/html
去浏览器访问一下:http:192.168.43.134
然后去jenkins机器上操作
安装ansible,配置主机清单
[root@jenkins ~]# yum -y install ansible
[root@jenkins ~]# cat /opt/hosts
[nginx]
192.168.43.134
[root@jenkins ~]# ansible -i /opt/hosts all -m ping -o
192.168.43.134 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
#-i 指定主机清单
#-m 指定参数模块
写一个脚本
[root@jenkins ~]# vim /opt/nginx-parameter.sh
#!/bin/bash
#nginx/tomcat
service_name=$1
#start/stop/restart/none
service_status=$2
#pull/reset1/reset2/reset-i/noned
gitlab_code=$3
#none/gitlab_code值为reset-id时需要
gitlab_id=$4
cmd="ansible -i /opt/hosts nginx"
if [ "$service_name" = "nginx" ];then
if [ "$gitlab_code" = "pull" ];then
$cmd -m shell -a "chdir=/usr/share/nginx/html git pull git@192.168.43.129:dog_wangwang/nginx-parameter.git"
elif [ "$gitlab_code" = "reset1" ];then
$cmd -m shell -a "chdir=/usr/share/nginx/html git reset --hard HEAD^"
elif [ "$gitlab_code" = "reset2" ];then
$cmd -m shell -a "chdir=/usr/share/nginx/html git reset --hard HEAD^^"
elif [ "$gitlab_code" = "reset-id" ];then
$cmd -m shell -a "chdir=/usr/share/nginx/html git reset --hard $gitlab_id"
fi
if [ "$service_status" != "none" ];then
$cmd -m shell -a "systemctl $service_status $service_name"
fi
fi
[root@jenkins ~]# sh -x /opt/nginx-parameter.sh
+ service_name=
+ service_status=
+ gitlab_code=
+ gitlab_id=
+ cmd='ansible -i /opt/hosts nginx'
+ '[' '' = nginx ']'
去jenkins页面
修改完成后保存,然后去gitlab上修改项目的文件,
修改后过来jenkins进行构建
参数化构建成功