Jenkins实战
- 1. 基于Gitlab触发Jenkins
- - SCM 触发
- - PUSH 事件触发
- 2. 基于Ansible部署交付任务
- 实验环境
- git 项目部署
- 准备ansible依赖
- 配置jenkins
- 配置部署环境
- 手动触发jenkins
1. 基于Gitlab触发Jenkins
- SCM 触发
server2:gitlab
server3:jenkins
启用gitlab,准备demo项目,将jenkins节点的ssh公钥上传至gitlab
进入jenkins,添加Gitlab插件 创建freestyle项目
关联gitlab项目地址至jenkins,并上传server3的ssh私钥至jenkins
构建SCM触发,间隔为一分钟,执行shell命令,此命令在jenkins用户的WORKSPACE下执行
手动构建
当代码库没有变更的时候,执行不变更
- PUSH 事件触发
将SCM触发修改为 PUSH事件触发
在高级设置中生成token
在Gitlab设置允许webhook外发请求
在demo项目设置的webhook中填写jenkins项目的地址以及生成的token
保存demo项目设置,保存Jenkins项目设置。
- 选择push event测试
成功触发
- git推送测试
在server2上修改demo项目文件并push至Gitlab,测试是否触发事件
echo This is a push event test! > index.html #变更文件
git commit -a -m "v1"
git push origin main #推送
成功触发构建时间,获取到Git更新信息
2. 基于Ansible部署交付任务
实验环境
需要三台主机,一台安装已经安装Jenkins,git以及Ansible的 server3
,其余两台server4
server5
,用于ansible部署httpd服务。
另需要一台主机rhel
安装git用于编写部署文件以及推送至gitee(可在上述3台主机中完成)。
git 项目部署
将更新git代码的主机公钥上传至gitee用于免密认证
ssh-keygen
cat ~/.ssh/id_rsa.pub
在此台主机上克隆此项目,并且与gitee仓库关联
git clone git@gitee.com:adolf001/playbook.git #克隆
cd playbook
git remote add origin git@gitee.com:adolf001/playbook.git #关联
git remote -v #查看
准备ansible依赖
- ansible 主配置文件
vim ansible.cfg
[defaults]
command_warnings=False
remote_user=devops #登陆至节点部署时使用 使用devops用户 节点主机需要拥有devops用户
[privilege_escalation]
become=True
become_method=sudo #节点主机devops用户需要有sudo权限
become_user=root
become_ask_pass=False
- playbook文件
vim playbook.yaml
---
- hosts: all
tasks:
- name: install apache
yum:
name: httpd
state: present
- name: configure apache
template:
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: restart apache
- name: start apache
service:
name: httpd
enabled: yes
state: started
handlers:
- name: restart apache
service:
name: httpd
state: restarted
- http conf 模板
在默认httpd文件的基础上根据节点不同部署不同的端口,需要添加j2模板的变量
cp /etc/httpd/conf/httpd.conf http.conf.j2
vim http.conf.j2
45 Listen {{ http_port }}
- invertory 变量目录
包含j2模板需要调用的变量,根据主机不同部署不同端口,server3上需要有两个主机的解析。
mkdir inventory
echo server5 http_port=8080 > test
echo server4 http_port=80 > prod
- 上传源码文件至gitee
git add .
git commit -m “v3”
git push origin master
在gitee查看
配置jenkins
在jinkens新建freestyle项目
选中git管理,添加giee中托管的项目
将server3即jenkins主机的私钥上传至jenkins,公钥上传至gitee
ssh-keygen
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa
选择参数化构建
构建执行shell
cd $WORKSPACE
ansible-playbook -i inventory/$deploy playbook.yaml
保存退出
配置部署环境
当使用jenkins部署时,在master节点上以jenkins用户的身份远程登陆至server4 5 的devops用户来执行部署命令。
因此server3的jenkins用户需要免密登陆至server4 5 的devops用户,并且devops用户需要sudo权限。
首先在server4 5 上添加devops用户并修改密码
[root@server4 ~]# useradd devops
[root@server4 ~]# echo westos | passwd --stdin devops
[root@server5 ~]# useradd devops
[root@server5 ~]# echo westos | passwd --stdin devops
修改配置devops用户的sudo权限
[root@server4 ~]# visudo
[root@server5 ~]# visudo
devops ALL=(ALL) NOPASSWD: ALL
在server3上,给jenkins用户添加可用的shell
[root@server3 ansible]# usermod -s /bin/bash jenkins
[root@server3 ansible]# su - jenkins
配置ssh免密
-bash-4.2$ ssh-keygen
-bash-4.2$ ssh-copy-id devops@server4
-bash-4.2$ ssh-copy-id devops@server5
测试
手动触发jenkins
在server4 5 上查看端口,部署成功