企业运维实战--jenkins持续集成快速入门并结合ansible进行简单部署

1.jenkins简介

Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、 自动化, 满足任何项目的需要。
• Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运 行。
• CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后, 立刻进行构建、(单元)测试。
在这里插入图片描述

CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部 署到更贴近真实运行环境(类生产环境)。
在这里插入图片描述

2.jenkins安装

准备一台全新的虚拟机server1,火墙和selinux全部关掉。

需要联网

下载地址:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

安装jdk

rpm -ivh jdk-11.0.11_linux-x64_bin.rpm

安装依赖性,前往阿里云镜像站下载,
再装jenkins

rpm -ivh daemonize-1.7.7-1.el7.x86_64.rpm
yum install -y jenkins-2.319-1.1.noarch.rpm

开启服务并查看8080端口


systemctl enable f executors on the built-in node to 0. See the documentatif executors on the built-in node to 0. See the documentatif executors on the built-in node to 0. See the documentatif executors on the built-in node to 0. See the documentati
netstat -antlp 

在这里插入图片描述

访问访问:172.25.76.1:8080
若出现AWT等的报错
则安装此软件

yum install fontconfig -y

使用默认初始密码登陆,初始密码位于

cat /var/lib/jenkins/secrets/initialAdminPassword

登陆成功并安装插件
在这里插入图片描述安装默认插件即可,使用admin用户,登录后修改密码 。
,使用admin用户,登录后修改密码 。

,使用admin用户,登录后修改密码 。

更新插件源

mkdir /var/lib/jenkins/update-center-rootCAs

wget https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/rootCA/update-center.crt -O /var/lib/jenkins/update-center-rootCAs/update-center.crt

chown jenkins.jenkins -R /var/lib/jenkins/update-center-rootCAs

查看哪个镜像站的速度快

curl -sSL https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/speed-test.sh | bash

在这里插入图片描述在设置中找到Update Site,将快的url填入
在这里插入图片描述查看镜像源文件,已更改

cat /var/lib/jenkins/hudson.model.UpdateCenter.xml

在这里插入图片描述

3.jenkins项目创建

3.1.简单项目–连接gitlab并自动触发

新建一个freestyle类型的项目名为project_01
在这里插入图片描述

为项目配置git仓库,安装gitlab插件
在这里插入图片描述在server1中安装git

yum install -y git

配置名为demo的项目,在源码管理一栏添加私有git url
私有git路径:git@172.25.76.8:root/demo.git
在这里插入图片描述

git仓库和Jenkins进行SSH免密连接,方法:
首先将server1的公钥上传到git

cat /.ssh/id_rsa.pub

在这里插入图片描述

然后将私钥上传到Jenkins

cat id_rsa

在这里插入图片描述
在这里插入图片描述
指定分支要与git中一样 故为main
在这里插入图片描述

构建触发器,测试轮询为每分钟

* * * * *

设置shell

ls -l

在这里插入图片描述查看控制台输出
在这里插入图片描述成功

gitlab自动触发jenkins

首先打开git设置----网络----外发请求, 允许Webhooks和服务对本地网络的请求
在这里插入图片描述在这里插入图片描述

在项目设置----Webhooks添加策略
在这里插入图片描述

其中token的获取方式为
Comment (regex) for triggering a build下点击***高级***后
在这里插入图片描述

成功添加策略,也可点击测试进行测试。
测试:
编辑docker文件并上传
vi Dockerfile

FROM nginx
COPY index.html /usr/share/nginx/html
git add Dockerfile 
git commit -m "add Dockerfile"
git push -u origin main

git下已上传成功

在这里插入图片描述查看jenkins 同样成功
在这里插入图片描述这些都在本地的/var/lib/jenkins/workspace/project_01中
在这里插入图片描述

3.2.jenkins自动构建镜像,并上传至harbor仓库

上个测试已经搞好了dockerfile
在这里插入图片描述
则下载插件
DOCKER BUILD AND PUBLISH
在这里插入图片描述

将配置好的server2的harbor仓库启动
在server1端安装docker并连接到server2 harbor仓库中
在这里插入图片描述
配置项目demo,按图中要求即可
在这里插入图片描述点 Registry credentials
添加连接仓库的钥匙,采用用户名密码的方式登陆harbor仓库,此处用户名密码为harbor仓库密码
在这里插入图片描述点高级 把force pull 勾去掉 关闭配置中强制拉取这一选项
在这里插入图片描述

运行项目,查看控制台输出,成功运行
在这里插入图片描述

成功运行,在harbor/library中查看上传的镜像,以任务执行名来命名的镜像
jenkins自动构建镜像,并上传至harbor仓库完成。
在这里插入图片描述

3.3 SSH方式进行jenkins操作

安装SSH插件后
添加ssh全局属性
Dashboard----配置----全局属性
在这里插入图片描述

点击添加
此处添加密钥为需要ssh登陆操作的服务器的账号和密码
在这里插入图片描述添加完成
配置project_02项目
创建一个project_02项目,类型为freestyle
在这里插入图片描述

构建触发器,当project_01项目完成后,进行project_02项目
在这里插入图片描述
选择构建步骤,采用ssh

在这里插入图片描述

打开虚拟机172.25.9.3, 主机名为server3,并配置好docker,连接harbor仓库,添加好解析。
配置好server3后 执行docker项目,查看控制台输出结果,
在这里插入图片描述并访问172.25.76.3
在这里插入图片描述

使用ssh方式操作jenkins成功。

4.jenkins节点管理–添加agent节点

先安装插件 ssh build agents
在这里插入图片描述

将server3配置成jenkins的agent端

server3安装jdk

rpm -ivh jdk-11.0.11_linux-x64_bin.rpm

节点管理----新建节点
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

安装成功显示
在这里插入图片描述

测试
先在server3 安装git
在server8 编辑index.html 并上传

www.linux.org

随后在执行一次project_02 查看docker_01的历史
在这里插入图片描述再次访问172.25.76.3
在这里插入图片描述

5.jenkins结合ansible

在ansible和saltstack之间,通常几百个节点用ansible,因为ansible用ssh连接、几万个节点用saltstack,消息队列更加轻量级。

5.1准备工作 配置

在jenkins主机安装ansible并且在master 里搞两个节点
在这里插入图片描述在server3 server4添加用户devops

useradd devops
passwd devops #搞一样的密码 方便操作
visudo  # 大约100行左右进行如图所示的授权

devops ALL=(ALL) NOPASSWD: ALL
在这里插入图片描述
回到server1

usermod -s /bin/bash jenkins  #使他可以登陆
su - jenkins
ssh-keygen #做免密认证
ssh-copy-id devops@172.25.76.3
ssh-copy-id devops@172.25.76.4

5.2gitlab创建playbook项目并完善

先在gitlab创造一个项目ansible
在这里插入图片描述

clone到server8编辑配置文件
git clone git@172.25.76.8:root/ansible.git

编辑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

编辑ansible.cfg配置文件

vim ansible.cfg

[defaults]
command_warnings=False
remote_user=devops

[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

创建清单,一个用于测试,一个用于部署

mkdir inventory
cd inventory/
vim prod

[test]
server3

vim test

[prod]
server4
mkdir host_vars
cd host_vars/
vim server3

http_port: 80

vim server4

http_port: 8080

修改apache配置文件的jinja2模板,使用清单中定义的变量传值

cp /etc/httpd/conf/httpd.conf /root/ansible/httpd.conf.j2
vim httpd.conf.j2

Listen {{ http_port }}

查看目录整体结构

yum install -y tree
tree .

在这里插入图片描述

提交上传修改后的文件

git add .
git status -s
git commit -m " v1"

git push -u origin main

在这里插入图片描述

此时git仓库成功配置

5.2.jenkins创建ansible项目

在这里插入图片描述

配置git仓库

选择参数化构建过程----选项参数:添加参数名、被选择的参数为按ansible执行清单
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

构建
执行shell

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

选择参数执行项目
先测试test
在这里插入图片描述

结果显示无错误,
在这里插入图片描述

且test节点httpd服务已启动。

后部署prod
在这里插入图片描述
显示成功
prod节点部署httpd服务成功,

测试:
server8 gitlab 主机:

vim /ansible/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
  - name: create index.html
    copy:
      content: '{{ansible_hostname}}'
      dest: /var/www/html/index.html
  handlers:
  - name: restart apache
    service:
      name: httpd
      state: restarted
git commit -a -m " v3"
git push -u origin main

上传提交
到jenkins:
在执行一次
在这里插入图片描述回到主机
curl server3:
在这里插入图片描述
成功

6.jenkins结合k8s

在这里插入图片描述

思路一:

ssh方式连接k8s master节点,然后执行kubectl命令即可。

思路二:

使用插件的方式管理k8s。


gitlab访问报错502

报错原因:8080端口被java占用

方法1:kill掉java进程,重载gitlab

方法2:修改gitlab配置文件vim /etc/gitlab/gitlab.rb 添加一个未使用的端口
external_url ‘http://172.25.76.8:8099’

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lll_cf

喜欢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值