CI/CD - jenkins
目录
一、部署
1、简介
2、部署
二、配置
三、实时触发
四、自动化构建docker镜像
五、通过ssh插件交付任务
六、添加jenkins节点
七、RBAC
八、pipeline
九、jenkins结合ansible参数化构建
1、安装ansible
2、新建gitlab项目
3、jenkins新建项目playbook
一、部署
1、简介
- Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
- Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。
- CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。
- CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。
2、部署
软件下载:Index of /jenkins/redhat/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
rpm -ivh jdk-11.0.15_linux-x64_bin.rpm
yum install -y fontconfig
rpm -ivh jenkins-2.395-1.1.noarch.rpm
启动服务:
systemctl enable --now jenkins.service
netstat -antlp|grep :8080
登录:
http://192.168.67.22:8080/
初始密码:
cat /var/lib/ienkins/secrets/initialAdminPassword
安装推荐插件
无需新建用户,直接使用admin账户
二、配置
修改密码:
新建项目:
当是这个错误时:
在jenkins主机上安装git工具:
yum install -y git
当是这个错误时:
创建密钥并上传gitlab:
ssh-keygen
添加gitlab认证凭据:
复制私钥:
当是这个错误时:
配置ssh
构建触发器
构建任务
指定分支
查看控制台输出
测试:
上传
三、实时触发
安装gitlab插件
配置项目触发器:
配置gitlab:
再回到demo项目下配置
将前面生成的token输入
测试推送:
四、自动化构建docker镜像
安装docker-ce
cd /etc/yum.repos.d/
vim docker.repo
[docker]
name=docker-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0
[update]
name=centos
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/extras/x86_64/
gpgcheck=0
yum install -y docker-ce
修改内核参数
配置docker默认仓库
拷贝仓库证书
添加解析
测试拉取
安装CloudBees Docker Build and Publish插件
配置项目构建
高级里边
修改docker.sock权限,不然jenkins无法直接执行docker命令
把主机上的docker login信息拷贝到Jenkins上
docker login reg.westos.org
cp -r /root/.docker/ /var/lib/jenkins/
cd /var/lib/jenkins/
chown -R jenkins.jenkins .docker/
在cicd1上提交Dockerfile
vim Dockerfile
FROM nginx
COPY index.html /usr/share/nginx/html
echo www.yyl.org >> index.html
git add .
git commit -m "add Dockerfile"
git push -u origin main
此时gitlab会主动触发jenkins构建任务,观察jenkins的任务输出
五、通过ssh插件交付任务
新建测试虚拟机cicd3 上安装docker-ce
同上
安装
修改内核参数
拷贝仓库证书
jenkins安装ssh插件
进入系统配置,添加ssh主机 添加新的凭据
新建docker_test项目
当project项目成功运行后触发docker_test项目
构建后查看输出
测试
触发
六、添加jenkins节点
安装jdk和git
rpm -ivh jdk-11.0.15_linux-x64_bin.rpm
yum install -y git
七、RBAC
安装插件
修改默认授权策略
新建测试用户
新建角色
用户授权
使用不同的用户登录,测试权限是否正确
八、pipeline
添加ssh
新建流水线项目 docker_image_build
配置
pipeline {
agent any
stages {
stage('check out') {
steps {
git credentialsId: 'f3a3dc6f-e7d6-45ae-9336-43dca000fcee', url: 'git@192.168.67.21:gitlab-instance-ae16f24d/demo.git', branch: 'main'
}
}
stage('docker build') {
steps {
sh '''
cd $WORKSPACE
docker build -t reg.westos.org/library/webserver:${BUILD_NUMBER} .
'''
}
}
stage('docker push') {
steps {
sh '''
REPOSITORY=reg.westos.org/library/webserver:${BUILD_NUMBER}
docker tag $REPOSITORY reg.westos.org/library/webserver:latest
docker login reg.westos.org -u admin -p 123456
docker push $REPOSITORY
docker push reg.westos.org/library/webserver:latest
'''
}
}
stage('docker deploy') {
steps {
sshagent(credentials: ['74dcb735-12f0-419f-aa0c-880ce3a763e9']) {
sh '''
ssh -o StrictHostKeyChecking=no root@192.168.67.23 """
docker ps -a |grep myapp && docker rm -f myapp
docker rmi reg.westos.org/library/webserver:latest
docker run -d --name myapp -p 80:80 reg.westos.org/library/webserver:latest """
'''
}
}
}
}
}
九、jenkins结合ansible参数化构建
主机环境
主机 | IP | 角色 |
cicd1 | 192.168.67.21 | 测试机test、devops sudo |
cicd2 | 192.168.67.22 | jenkins、ansible |
cicd3 | 192.168.67.23 | 测试机prod、devops sudo |
1、安装ansible
vim /etc/yum.repos.d/ansible.repo
[ansible]
name=epel
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/
gpgcheck=0
yum install -y ansible
devops是测试机的ssh免密用户,并且配置sudo
useradd devops
echo westos | passwd --stdin devops
visudo
devops ALL=(ALL) NOPASSWD: ALL
在ansible主机上以jenkins身份配置ssh免密到所有测试机
usermod -s /bin/bash jenkins
su - jenkins
ssh-copy-id devops@192.168.67.21
ssh-copy-id devops@192.168.67.23
2、新建gitlab项目
克隆项目
git clone git@192.168.67.21:root/playbook.git
cd playbook/
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 test
[test]
192.168.67.21 http_port=8000
vim prod
[prod]
192.168.67.23 http_port=8080
cd ..
vim playbook.yaml
---
- hosts: all
tasks:
- name: install the latest version of Apache
yum:
name: httpd
state: latest
- name: configure apache
template:
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: restart apache
- name: Start service httpd, if not started
service:
name: httpd
state: started
enabled: yes
handlers:
- name: restart apache
service:
name: httpd
state: restarted
yum install -y httpd
cp /etc/httpd/conf/httpd.conf .
mv httpd.conf httpd.conf.j2
vim httpd.conf.j2
修改端口
Listen {{ http_port }}
推送项目
git add .
git commit -m "add playbook"
git push -u origin main
3、jenkins新建项目playbook
新建:
选择参数构建:
添加首页:
echo cicd1 > /var/www/html/index.html
echo cicd3 > /var/www/html/index.html
测试: