目录
[一. 准备ansible](#一. 准备ansible)
[二. Gitlab新建子项目](#二. Gitlab新建子项目)
[三. Jenkins建立任务,进行初步配置](#三. Jenkins建立任务,进行初步配置)
[四. 导入nginx主机的公钥](#四. 导入nginx主机的公钥)
[五. 配置ansible执行脚本](#五. 配置ansible执行脚本)
[六. 构建测试](#六. 构建测试)
一. 准备ansible
在jenkins主机中安装ansible
bash
[root@jenkins ~]# yum install -y epel-release
[root@jenkins ~]# yum install -y ansible
查看配置文件
bash
[root@jenkins ~]# cat /etc/ansible/ansible.cfg
# Since Ansible 2.12 (core):
# To generate an example config file (a "disabled" one with all default settings, commented out):
# $ ansible-config init --disabled > ansible.cfg
#
# Also you can now have a more complete file by including existing plugins:
# ansible-config init --disabled -t all > ansible.cfg
# For previous versions of Ansible you can check for examples in the 'stable' branches of each version
# Note that this file was always incomplete and lagging changes to configuration settings
# for example, for 2.9: https://github.com/ansible/ansible/blob/stable-2.9/examples/ansible.cfg
初次进入需要自己选择两个命令其中一个执行,然后生成配置命令,后者比前者多一些插件相关的配置选项。
ansible-config init --disabled > ansible.cfg
或
ansible-config init --disabled -t all > ansible.cfg
bash
[root@jenkins ~]# cd /etc/ansible/
[root@jenkins ansible]# ansible-config init --disabled -t all > ansible.cfg
bash
[root@jenkins ansible]# vim /etc/ansible/ansible.cfg +318
host_key_checking=Flase #将这个参数配置打开
配置主机清单
本机jenkins为192.168.226.22 主机清单配置另一台用于nginx上线项目的主机192.168.226.21
bash
[root@jenkins ansible]# vim /etc/ansible/hosts
[nginx]
192.168.226.21 ansible_user=root ansible_password=lzz2578+
[tomcat]
验证连通性
bash
[root@jenkins ansible]# ansible all -m ping
192.168.226.21 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
在192.168.226.21主机中下载nginx并启动
bash
[root@nginx ~]# yum install -y nginx && systemctl enable --now nginx
二. Gitlab新建子项目
gitlab仓库主机为192.168.226.20
建立一个index.html代码文件用于测试
输入代码提交
bash
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>测试小标题</title>
</head>
<body>
<h1>第是第一个小标题</h1>
</body>
</html>
三. Jenkins建立任务,进行初步配置
图中设置中构建步骤的代码如下:
bash
echo "=========="
sh /opt/ansible.sh $service $status $gitlab_code $code_id
echo "==========="
echo "代码上线完成"
四. 导入nginx主机的公钥
bash
# 生成密钥对
[root@nginx ~]# ssh-keygen
# 复制查看到的公钥
[root@nginx ~]# cat .ssh/id_rsa.pub
bash
[root@nginx nginx]# cd /usr/share/nginx
# 备份原目录
[root@nginx nginx]# mv html html.break
克隆代码仓库
bash
[root@jenkins nginx]# git clone git@192.168.226.20:ugo_team/ceshi-paramter.git
# 给改目录改名
[root@nginx nginx]# mv ceshi-paramter html
五. 配置ansible执行脚本
bash
[root@jenkins nginx]# cd /opt
[root@jenkins opt]# vim ansible.sh
#!/bin/bash
# 接收 Jenkins 传递的参数
SERVICE_NAME="$1"
SERVICE_STATUS="$2"
GITLAB_CODE="$3"
CODE_ID="$4"
# Ansible 主机清单路径
HOST="/etc/ansible/hosts"
# Ansible 命令基础部分
CMD="/usr/bin/ansible -i $HOST"
# 检查服务名称是否为 nginx,并根据传递的 GITLAB_CODE 参数执行不同的操作
if [ "$SERVICE_NAME" = "nginx" ]; then
if [ "$GITLAB_CODE" = "pull" ]; then
echo "Executing: $CMD $SERVICE_NAME -m shell -a 'chdir=/usr/share/nginx/html git pull origin main'"
$CMD $SERVICE_NAME -m shell -a "chdir=/usr/share/nginx/html git pull origin main"
elif [ "$GITLAB_CODE" = "reset1" ]; then
echo "Executing: $CMD $SERVICE_NAME -m shell -a 'chdir=/usr/share/nginx/html git reset --hard HEAD^'"
$CMD $SERVICE_NAME -m shell -a "chdir=/usr/share/nginx/html git reset --hard HEAD^"
elif [ "$GITLAB_CODE" = "reset2" ]; then
echo "Executing: $CMD $SERVICE_NAME -m shell -a 'chdir=/usr/share/nginx/html git reset --hard HEAD^^'"
$CMD $SERVICE_NAME -m shell -a "chdir=/usr/share/nginx/html git reset --hard HEAD^^"
elif [ "$GITLAB_CODE" = "code_id" ]; then
echo "Executing: $CMD $SERVICE_NAME -m shell -a 'chdir=/usr/share/nginx/html git reset --hard $CODE_ID'"
$CMD $SERVICE_NAME -m shell -a "chdir=/usr/share/nginx/html git reset --hard $CODE_ID"
else
echo "Unknown GITLAB_CODE: $GITLAB_CODE"
exit 1
fi
# 根据传递的 SERVICE_STATUS 参数执行 systemctl 操作
if [ "$SERVICE_STATUS" != "none" ]; then
echo "Executing: $CMD $SERVICE_NAME -m service -a 'name=$SERVICE_NAME state=$SERVICE_STATUS'"
$CMD $SERVICE_NAME -m service -a "name=$SERVICE_NAME state=$SERVICE_STATUS"
fi
else
echo "Unsupported SERVICE_NAME: $SERVICE_NAME"
exit 1
fi
加上执行权限
bash
[root@jenkins opt]# chmod +x ansible.sh
六. 构建测试
点击构建
选择对应的参数
看构建成功
访问nginx主机的网页例如我这里访问:http://192.168.226.21/
代码仓库修改代码测试
再次构建
如此再重复进行一次修改并构建
进行版本回退测试,回退上两个版本
回退到指定版本
到代码仓库查提交记录
这次选择刚最新提交的,也是有三个标题的那个版本,复制其对应的字符
点击构建,选择对应的参数
如此就完成了简易实验。