Jenkins实战

  • 1. 基于Gitlab触发Jenkins
  • - SCM 触发
  • - PUSH 事件触发
  • 2. 基于Ansible部署交付任务
  • 实验环境
  • git 项目部署
  • 准备ansible依赖
  • 配置jenkins
  • 配置部署环境
  • 手动触发jenkins


1. 基于Gitlab触发Jenkins

- SCM 触发

server2:gitlabserver3:jenkins 启用gitlab,准备demo项目,将jenkins节点的ssh公钥上传至gitlab

Jenkins和ansible原理 jenkins ansible部署_gitlab

进入jenkins,添加Gitlab插件 创建freestyle项目

Jenkins和ansible原理 jenkins ansible部署_linux_02


Jenkins和ansible原理 jenkins ansible部署_linux_03

关联gitlab项目地址至jenkins,并上传server3的ssh私钥至jenkins

Jenkins和ansible原理 jenkins ansible部署_git_04


Jenkins和ansible原理 jenkins ansible部署_linux_05

构建SCM触发,间隔为一分钟,执行shell命令,此命令在jenkins用户的WORKSPACE下执行

Jenkins和ansible原理 jenkins ansible部署_Jenkins和ansible原理_06


手动构建

Jenkins和ansible原理 jenkins ansible部署_jenkins_07


当代码库没有变更的时候,执行不变更

Jenkins和ansible原理 jenkins ansible部署_jenkins_08

- PUSH 事件触发

将SCM触发修改为 PUSH事件触发

Jenkins和ansible原理 jenkins ansible部署_jenkins_09


在高级设置中生成token

Jenkins和ansible原理 jenkins ansible部署_jenkins_10

在Gitlab设置允许webhook外发请求

Jenkins和ansible原理 jenkins ansible部署_linux_11

在demo项目设置的webhook中填写jenkins项目的地址以及生成的token

Jenkins和ansible原理 jenkins ansible部署_git_12


保存demo项目设置,保存Jenkins项目设置。

  • 选择push event测试

Jenkins和ansible原理 jenkins ansible部署_Jenkins和ansible原理_13

成功触发

Jenkins和ansible原理 jenkins ansible部署_Jenkins和ansible原理_14

- git推送测试

在server2上修改demo项目文件并push至Gitlab,测试是否触发事件

echo This is a push event test! > index.html #变更文件
git commit -a -m "v1"
git push origin main #推送

Jenkins和ansible原理 jenkins ansible部署_linux_15


成功触发构建时间,获取到Git更新信息

Jenkins和ansible原理 jenkins ansible部署_git_16

Jenkins和ansible原理 jenkins ansible部署_Jenkins和ansible原理_17

2. 基于Ansible部署交付任务

实验环境

需要三台主机,一台安装已经安装Jenkins,git以及Ansible的 server3,其余两台server4 server5,用于ansible部署httpd服务。
另需要一台主机rhel安装git用于编写部署文件以及推送至gitee(可在上述3台主机中完成)。

git 项目部署

Jenkins和ansible原理 jenkins ansible部署_gitlab_18

将更新git代码的主机公钥上传至gitee用于免密认证

ssh-keygen
cat ~/.ssh/id_rsa.pub

Jenkins和ansible原理 jenkins ansible部署_Jenkins和ansible原理_19

在此台主机上克隆此项目,并且与gitee仓库关联

Jenkins和ansible原理 jenkins ansible部署_linux_20

git clone git@gitee.com:adolf001/playbook.git #克隆
cd playbook
git remote add origin git@gitee.com:adolf001/playbook.git #关联
git remote -v #查看

Jenkins和ansible原理 jenkins ansible部署_git_21

准备ansible依赖

Jenkins和ansible原理 jenkins ansible部署_Jenkins和ansible原理_22

  • 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

Jenkins和ansible原理 jenkins ansible部署_Jenkins和ansible原理_23

在gitee查看

Jenkins和ansible原理 jenkins ansible部署_Jenkins和ansible原理_24

配置jenkins

在jinkens新建freestyle项目

Jenkins和ansible原理 jenkins ansible部署_git_25

选中git管理,添加giee中托管的项目

Jenkins和ansible原理 jenkins ansible部署_linux_26

将server3即jenkins主机的私钥上传至jenkins,公钥上传至gitee

Jenkins和ansible原理 jenkins ansible部署_linux_27

ssh-keygen
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa

Jenkins和ansible原理 jenkins ansible部署_Jenkins和ansible原理_28

选择参数化构建

Jenkins和ansible原理 jenkins ansible部署_jenkins_29

构建执行shell

cd $WORKSPACE
ansible-playbook -i inventory/$deploy playbook.yaml

Jenkins和ansible原理 jenkins ansible部署_Jenkins和ansible原理_30

保存退出

配置部署环境

当使用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

Jenkins和ansible原理 jenkins ansible部署_gitlab_31

修改配置devops用户的sudo权限

[root@server4 ~]# visudo
[root@server5 ~]# visudo
devops  ALL=(ALL)       NOPASSWD: ALL

Jenkins和ansible原理 jenkins ansible部署_linux_32

在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和ansible原理 jenkins ansible部署_gitlab_33

手动触发jenkins

Jenkins和ansible原理 jenkins ansible部署_gitlab_34


Jenkins和ansible原理 jenkins ansible部署_gitlab_35


Jenkins和ansible原理 jenkins ansible部署_git_36


在server4 5 上查看端口,部署成功

Jenkins和ansible原理 jenkins ansible部署_Jenkins和ansible原理_37


Jenkins和ansible原理 jenkins ansible部署_jenkins_38