1.jenkins简介

Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、 自动化, 满足任何项目的需要。

• Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运 行。

• CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后, 立刻进行构建、(单元)测试。

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins配置Ansible 插件

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

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_02

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

jenkins配置Ansible 插件 jenkins ansible部署微服务_运维_03

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

yum install fontconfig -y

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

cat /var/lib/jenkins/secrets/initialAdminPassword

登陆成功并安装插件

jenkins配置Ansible 插件 jenkins ansible部署微服务_ci_04

安装默认插件即可,使用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

jenkins配置Ansible 插件 jenkins ansible部署微服务_ci_05

在设置中找到Update Site,将快的url填入

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins配置Ansible 插件_06

查看镜像源文件,已更改

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

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_07

3.jenkins项目创建

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

新建一个freestyle类型的项目名为project_01

jenkins配置Ansible 插件 jenkins ansible部署微服务_git_08

为项目配置git仓库,安装gitlab插件

jenkins配置Ansible 插件 jenkins ansible部署微服务_git_09

在server1中安装git

yum install -y git

配置名为demo的项目,在源码管理一栏添加私有git url

私有git路径:git@172.25.76.8:root/demo.git

jenkins配置Ansible 插件 jenkins ansible部署微服务_运维_10

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

cat /.ssh/id_rsa.pub

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_11

然后将私钥上传到Jenkins

cat id_rsa

jenkins配置Ansible 插件 jenkins ansible部署微服务_git_12


jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_13


指定分支要与git中一样 故为main

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins配置Ansible 插件_14

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

* * * * *

设置shell

ls -l

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_15

查看控制台输出

jenkins配置Ansible 插件 jenkins ansible部署微服务_git_16

成功

gitlab自动触发jenkins

首先打开git设置----网络----外发请求, 允许Webhooks和服务对本地网络的请求

jenkins配置Ansible 插件 jenkins ansible部署微服务_运维_17

jenkins配置Ansible 插件 jenkins ansible部署微服务_运维_18

在项目设置----Webhooks添加策略

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins配置Ansible 插件_19

其中token的获取方式为

Comment (regex) for triggering a build下点击***高级***后

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_20

成功添加策略,也可点击测试进行测试。
测试:
编辑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配置Ansible 插件 jenkins ansible部署微服务_ci_21

查看jenkins 同样成功

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_22

这些都在本地的/var/lib/jenkins/workspace/project_01中

jenkins配置Ansible 插件 jenkins ansible部署微服务_git_23

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

上个测试已经搞好了dockerfile

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_24


则下载插件

DOCKER BUILD AND PUBLISH

jenkins配置Ansible 插件 jenkins ansible部署微服务_ci_25

将配置好的server2的harbor仓库启动

在server1端安装docker并连接到server2 harbor仓库中

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_26


配置项目demo,按图中要求即可

jenkins配置Ansible 插件 jenkins ansible部署微服务_git_27

点 Registry credentials

添加连接仓库的钥匙,采用用户名密码的方式登陆harbor仓库,此处用户名密码为harbor仓库密码

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_28

点高级 把force pull 勾去掉 关闭配置中强制拉取这一选项

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_29

运行项目,查看控制台输出,成功运行

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_30

成功运行,在harbor/library中查看上传的镜像,以任务执行名来命名的镜像

jenkins自动构建镜像,并上传至harbor仓库完成。

jenkins配置Ansible 插件 jenkins ansible部署微服务_运维_31

3.3 SSH方式进行jenkins操作

安装SSH插件后

添加ssh全局属性

Dashboard----配置----全局属性

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins配置Ansible 插件_32

点击添加

此处添加密钥为需要ssh登陆操作的服务器的账号和密码

jenkins配置Ansible 插件 jenkins ansible部署微服务_运维_33

添加完成

配置project_02项目

创建一个project_02项目,类型为freestyle

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_34

构建触发器,当project_01项目完成后,进行project_02项目

jenkins配置Ansible 插件 jenkins ansible部署微服务_运维_35


选择构建步骤,采用ssh

jenkins配置Ansible 插件 jenkins ansible部署微服务_运维_36

打开虚拟机172.25.9.3, 主机名为server3,并配置好docker,连接harbor仓库,添加好解析。

配置好server3后 执行docker项目,查看控制台输出结果,

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_37

并访问172.25.76.3

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins配置Ansible 插件_38

使用ssh方式操作jenkins成功。

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

先安装插件 ssh build agents

jenkins配置Ansible 插件 jenkins ansible部署微服务_ci_39

将server3配置成jenkins的agent端

server3安装jdk

rpm -ivh jdk-11.0.11_linux-x64_bin.rpm

节点管理----新建节点

jenkins配置Ansible 插件 jenkins ansible部署微服务_ci_40

jenkins配置Ansible 插件 jenkins ansible部署微服务_git_41


jenkins配置Ansible 插件 jenkins ansible部署微服务_git_42

安装成功显示

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins配置Ansible 插件_43

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

www.linux.org

随后在执行一次project_02 查看docker_01的历史

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_44

再次访问172.25.76.3

jenkins配置Ansible 插件 jenkins ansible部署微服务_运维_45

5.jenkins结合ansible

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

5.1准备工作 配置

在jenkins主机安装ansible并且在master 里搞两个节点

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins配置Ansible 插件_46

在server3 server4添加用户devops

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

devops ALL=(ALL) NOPASSWD: ALL

jenkins配置Ansible 插件 jenkins ansible部署微服务_运维_47


回到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

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_48

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 .

jenkins配置Ansible 插件 jenkins ansible部署微服务_运维_49

提交上传修改后的文件

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

git push -u origin main

jenkins配置Ansible 插件 jenkins ansible部署微服务_git_50

此时git仓库成功配置

5.2.jenkins创建ansible项目

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins配置Ansible 插件_51

配置git仓库

选择参数化构建过程----选项参数:添加参数名、被选择的参数为按ansible执行清单

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins配置Ansible 插件_52


jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins配置Ansible 插件_53


jenkins配置Ansible 插件 jenkins ansible部署微服务_运维_54

构建
执行shell

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

选择参数执行项目

先测试test

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_55

结果显示无错误,

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins_56

且test节点httpd服务已启动。

后部署prod

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins配置Ansible 插件_57


显示成功

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:

在执行一次

jenkins配置Ansible 插件 jenkins ansible部署微服务_ci_58

回到主机

curl server3:

jenkins配置Ansible 插件 jenkins ansible部署微服务_jenkins配置Ansible 插件_59


成功

6.jenkins结合k8s

jenkins配置Ansible 插件 jenkins ansible部署微服务_git_60

思路一:

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’