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’