企业运维实战--jenkins持续集成快速入门并结合ansible进行简单部署
- 前言-jenkins简介
- 一、jenkins安装
- 二、jenkins插件安装
- 三、jenkins项目创建
- 1.简单项目--连接gitlab并自动触发
- 2.jenkins自动构建镜像,并上传至harbor仓库
- 3.jenkins拉取harbor仓库镜像
- 4.SSH方式进行jenkins操作
- 五、jenkins节点管理--添加agent节点
- 六、jenkins用户管理
- 七、jenkins结合ansible
- 1.gitlab创建playbook项目并完善
- 2.jenkins创建ansible项目
- 八、jenkins结合k8s
- 笔记补充
前言-jenkins简介
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、 自动化, 满足任何项目的需要。
• Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运 行。
• CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后, 立刻进行构建、(单元)测试。
CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部 署到更贴近真实运行环境(类生产环境)。
一、jenkins安装
准备一台全新的虚拟机server3,火墙和selinux全部关掉。
需要联网
下载地址:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
安装jdk
rpm -ivh jdk-8u171-linux-x64.rpm
安装依赖性,前往阿里云镜像站下载,
再装jenkins
rpm -ivh daemonize-1.7.7-1.el7.x86_64.rpm
yum install -y jenkins-2.306-1.1.noarch.rpm
开启服务
systemctl start jenkins
访问访问:172.25.9.3:8080
使用默认初始密码登陆,初始密码位于
cat /var/lib/jenkins/secrets/initialAdminPassword
登陆成功。
更新插件源
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/hubson.model.UpdateCenter.xml
二、jenkins插件安装
Dashboard ----> Plugin Manager
点击available,搜索中文插件,点击install
刷新后即可查看中文版本,部分仍然为英文是因为插件不完整
安装pipeline流水线插件
三、jenkins项目创建
1.简单项目–连接gitlab并自动触发
安装好流水线插件后即可创建项目
新建一个freestyle类型的项目名为demo
为项目配置git仓库,安装gitlab插件
配置名为demo的项目,在源码管理一栏添加私有git url
私有git路径:git@172.25.9.2:root/demo.git
报错,因为Jenkins本机未安装git
yum install -y git
安装完成后,报错发生变化
报错原因,git仓库无法和Jenkins进行SSH免密连接,解决方法:
首先将server3的公钥上传到git
然后将公钥上传到Jenkins,选择ssh方式上传,报错解决。
构建触发器,测试轮询为每分钟,格式见图
设置shell
ls -l
测试:git端添加测试文件index.html,察看是否同步
添加完成后记得push!!
查看demo项目控制台输出
index文件已检测到
gitlab自动触发jenkins
首先打开git设置----网络----外发请求, 允许Webhooks和服务对本地网络的请求 在项目设置----Webhooks添加策略
其中token的获取方式为
成功添加策略,也可点击测试进行测试。
2.jenkins自动构建镜像,并上传至harbor仓库
git端编辑Dockerfile,定义拉取的测试镜像
push
jenkins端查看同步后的Dockerfile
下载插件
将配置好的harbor仓库启动
在server3端安装docker并连接到server1 harbor仓库中,步骤忽略
配置项目demo,按图中要求即可
添加连接仓库的钥匙,采用用户名密码的方式登陆harbor仓库,此处用户名密码为harbor仓库密码
添加成功显示:
修改套接字文件权限
关闭配置中强制拉取这一选项
运行项目,查看控制台输出,成功运行
成功运行,在harbor/library/demo中查看上传的镜像,以任务执行名来命名的镜像
jenkins自动构建镜像,并上传至harbor仓库完成。
3.jenkins拉取harbor仓库镜像
创建一个docker项目,类型为freestyle
构建触发器,当demo项目完成后,进行docker项目执行shell命令,拉取仓库镜像
完成配置后点击项目后的按钮进行执行
执行完毕查看Bulid History的控制台输出
显示结果为成功
在server3中查看docker容器
改进:每次实行都生成新的容器,修改shell命令一栏即可
执行查看控制台
4.SSH方式进行jenkins操作
安装ssh插件
添加ssh全局属性
Dashboard----配置----全局属性
此处添加密钥为需要ssh登陆操作的服务器的账号和密码
添加完成
配置docker项目
选择构建步骤,采用ssh
打开虚拟机172.25.9.4, 主机名为server4,并配置好docker,连接harbor仓库,添加好解析。
只需将原来的docker配置文件scp过去即可,此处操作忽略。
配置好server4后 执行docker项目,查看控制台输出结果,
使用ssh方式操作jenkins成功。
五、jenkins节点管理–添加agent节点
将server4配置成jenkins的agent端
server4安装jdk
节点管理----新建节点
安装agent插件
安装成功显示
测试,关闭master节点,运行项目,查看控制台输出
测试结束后记得打开master节点,避免影响后续实验。
六、jenkins用户管理
创建新用户hyl,默认创建用户会给定全部权限
默认创建用户会给定全部权限
显然这样是不安全的。
安装插件Role 安装后通过插件授权
设定全局安全配置----授权策略----Role-Based Strategy,设置后除了admin用户以外,其他用户均需要授权才可进行操作
管理角色
分配角色
创建项目demo.01 ,测试查看用户hyl的权限
可以看到,hyl用户只能看到demo.* 开头的项目。
七、jenkins结合ansible
在ansible和saltstack之间,通常几百个节点用ansible,因为ansible用ssh连接、几万个节点用saltstack,消息队列更加轻量级。
1.gitlab创建playbook项目并完善
clone到server2编辑配置文件
编辑README.md文件测试git仓库是否能够成功push
git clone git@172.25.9.2:root/playbook.git
cd playbook/
touch README.md
git add README.md
git commit -m "add README.md"
git push -u origin master
编辑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
vim test
cat *
[root@server2 playbook]# cat inventory/prod
server5 http_port=80
[root@server2 playbook]# cat inventory/test
server4 http_port=8080
修改apache配置文件的jinja2模板,使用清单中定义的变量传值
mv httpd.conf httpd.conf.j2
vim httpd.conf.j2
查看目录整体结构
yum install -y tree
tree .
交付修改后的文件
git add .
git status -s
git commit -m " v1"
git push -u origin master
此时git仓库成功配置
2.jenkins创建ansible项目
配置git仓库
先查看连接是否正常
shell查看文件是否通过jenkins
执行项目,
成功,说明ansible项目gitlab与jenkins连接成功。
对ansible待操作的节点需要一些简单配置:
jenkins端,使用jenkins用户进行操作,需要给一个交互式bash
server4/5:
创建用户并修改密码,需要两节点的用户id相同
useradd devops
id devops
echo westos | passwd --stdin devops
sudo授权
visudo
# 大约100行左右进行如图所示的授权
devops ALL=(ALL) NOPASSWD: ALL
server3:(jenkins端),切换用户到jenkins,免密登录ansible的node节点
usermod -s /bin/bash jenkins
su - jenkins
cd /var/lib/jenkins/workspace/ansible
ssh-keygen
ssh-copy-id devops@server4
ssh-copy-id devops@server5
准备工作完成,开始在jenkins中晚上配置ansible项目
选择参数化构建过程----选项参数:添加参数名、被选择的参数为按ansible执行清单
构建
执行shell
cd $WORKSPACE
ansible-playbook -i inventory/$deploy playbook.yaml
选择参数执行项目
先测试test
结果显示无错误,
且test节点httpd服务已启动。
后部署prod
显示成功
prod节点部署httpd服务成功,
八、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.9.2:8099’