jenkins持续集成

jenkins简介

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

[root@server2 ~]# rpm -ivh jdk-8u171-linux-x64.rpm
[root@server2 ~]# rpm -ivh jenkins-2.283-1.1.noarch.rpm
[root@server2 ~]# cd /var/lib/jenkins/
[root@server2 jenkins]# systemctl start jenkins
[root@server2 jenkins]# vim hudson.model.UpdateCenter.xml
[root@server2 updates]# sed -i.bak 's/http:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
[root@server2 updates]# sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

docker

先搭建一个本地仓库:

[root@server2 ~]# yum install docker-ce -y
[root@server2 ~]# docker info
[root@server2 ~]# systemctl enable docker.service
[root@server2 ~]# systemctl start docker.service
[root@server2 ~]# sysctl -a | grep bridge-nf-call-iptables
[root@server2 ~]# vim /etc/sysctl.d/docker.conf
[root@server2 ~]# sysctl  --system
[root@server2 ~]# docker pull registry
[root@server2 ~]# docker history registry:latest
[root@server2 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry
[root@server2 ~]# chmod 777 /var/run/docker.sock

在jenkins 中编写一个Dockerfile

[root@server1 ~ ]# cd demo
[root@server1 demo]# vim Dockerfile
FROM nginx
COPY index.html /usr/share/nginx/html
[root@server1 demo]# git add Dockerfile
[root@server1 demo]# git commit -m "add Dockerfile"
[root@server1 demo]# git push origin master

在这里插入图片描述
在jenkins中安装插件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试上传镜像:

[root@server2 ~]# docker pull  nginx
[root@server2 ~]# docker tag nginx:latest localhost:5000/nginx:latest
[root@server2 ~]# docker push localhost:5000/nginx:latest

在这里插入图片描述
在这里插入图片描述
再次测试:

[root@server1 demo]# vim index.html 
www.westos.org
www.westos.org

www.westos.org
www.westos.org
[root@server1 demo]# git commit -a -m "update index.html"
[root@server1 demo]# git push origin master

在这里插入图片描述

修改docker.sock权限,不然jenkins无法直接执行docker命令:
[root@server2 ~]# chmod 777 /var/run/docker.sock

在这里插入图片描述
在这里插入图片描述

替换成私有仓库

仓库我这里使用的是sever11,提前搭好的直接使用,只需将证书给server2 server3

[root@server11 docker]# scp -r certs.d/ server2:/etc/docker/
[root@server11 docker]# scp -r certs.d/ server3:/etc/docker/

在项目test配置中修改仓库位置,如下图:
在这里插入图片描述
再次点击立即构建,查看控制台
在这里插入图片描述

Jenkins使用tls方式连接docker构建主机

生成key和ca证书

[root@server3 ~]# openssl genrsa -aes256 -out ca-key.pem 4096
[root@server3 ~]# openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

生成server-key和csr文件(server3为dcker主机名)

[root@server3 ~]# openssl genrsa -out server-key.pem 4096
[root@server3 ~]# openssl req -subj "/CN=server3" -sha256 -new -key server-key.pem -out server.csr

可以使用ip地址方式进行tls连接

[root@server3 ~]# echo subjectAltName = DNS:server3,IP:172.25.3.3,IP:127.0.0.1 >> extfile.cnf
[root@server3 ~]# echo extendedKeyUsage = serverAuth >> extfile.cnf
[root@server3 ~]# openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem   -CAcreateserial -out server-cert.pem -extfile extfile.cn

Jenkins使用tls方式连接docker构建主机
安装docker证书:

[root@server3 ~]# cp ca.pem server-cert.pem server-key.pem /etc/docker/
[root@server3 ~]# cp /usr/lib/systemd/system/docker.service /etc/systemd/system/docker.service
[root@server3 ~]# vim /etc/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2376

在这里插入图片描述

[root@server3 ~]# systemctl daemon-reload
[root@server3 ~]# systemctl restart docker
[root@server3 ~]# netstat -antlp | grep 2376

在这里插入图片描述
添加证书.

[root@server3 ~]# cat key.pem
[root@server3 ~]# cat cert.pe
[root@server3 ~]# cat ca.pem 

将这三个添加到其中。
在这里插入图片描述
新建一个任务,这里是我创建好的截图
在这里插入图片描述
现在进行配置
添加docker交付任务
在这里插入图片描述
安装一个SSH插件
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

[root@server1 demo]# cat index.html 
www.westos.org
www.westos.org

www.westos.org
www.westos.org
hello world
hello world
[root@server1 demo]# git commit -a -m "update index.html v2"
[root@server1 demo]# git push origin master
[root@server3 ~]# curl  localhost

在这里插入图片描述

jenkins结合ansible

添加ansible交付任务:
Jenkins服务器提前部署好到目标主机的ssh免密,并安装ansible软件包。

由于是以jenkins用户调用ansible命令,所以需要设置jenkins用户到目标主机的免密。

新建playbook代码仓库
在这里插入图片描述

[root@server1 playbook]# tree .
.
├── ansible.cfg
├── httpd.conf.j2
├── inventory
│   ├── prod
│   └── test
├── playbook.yml
└── README.md
[root@server1 playbook]# vim ansible.cfg 
[defaults]
command_warnings=False
remote_user=jenkins

[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
[root@server1 playbooke]# vim playbook.yml 
---
- hosts: all
  tasks:
    - name: install httpd
      yum:
        name: httpd
        state: present
    - name: start httpd
      service:
        name: httpd
        state: started
[root@server1 playbooke]# mkdir inventor
[root@server1 playbooke]# cd inventor/
[root@server1 inventor]# ls
prod  test    ## 填写主机名

在执行playbook时可以指定inventory文件: test、prod
在这里插入图片描述
只需指定git仓库即可,无需gitlab主动触发,因为需要手动选择inventory构建参数
在这里插入图片描述
在这里插入图片描述

[root@server4 ~]# groupadd -g 996 jenkins
[root@server4 ~]# useradd -u 998 -g 996 jenkins
[root@server4 ~]# echo westos| passwd --stdin jenkins
[root@server2 ansible]# usermod -s /bin/bash jenkins
[root@server2 ansible]# su - jenkins
-bash-4.2$ cd workspace/
-bash-4.2$ ls
-bash-4.2$ cd ansible
-bash-4.2$ ssh-keygen
-bash-4.2$ ssh-copy-id server4

注意:要在jenkins上执行一下,会同步到文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值