持续集成与持续交付(一)—git工具使用、jenkins持续集成
1.git工具使用
git官网
[root@server5 ~]# yum install git -y 安装git
[root@server5 ~]# mkdir demo 创建初始目录
[root@server5 ~]# cd demo/
[root@server5 demo]# git init 初始化
Initialized empty Git repository in /root/demo/.git/
[root@server5 demo]# l. 隐藏
. .. .git
[root@server5 demo]# echo westos > README.md 建立一个文件 git仓库尽量放文本
[root@server5 demo]# git status 查看状态
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed) 执行git add <file> 添加文件
#
# README.md
nothing added to commit but untracked files present (use "git add" to track)
[root@server5 demo]# git add README.md 添加这个文件 执行git add 后数据在暂存区
[root@server5 demo]# git status -s 查看此文件处于什么状态
A README.md
[root@server5 demo]# git commit -m 'add readme' 提交,出现提示
[root@server5 demo]# git config --global user.name "wxh" 添加用户名
[root@server5 demo]# git config --global user.email "yakexi@westos.org" 添加邮箱
[root@server5 demo]# git commit -m 'add readme' 再次提交成功 -m后边是描述
[master (root-commit) ed0f05e] add readme1 file changed, 1 insertion(+)create mode 100644 README.md
[root@server5 demo]# git log 查看提交日志
commit ed0f05e8a555d874844c9fa395ba1e001d2e985f
Author: wxh <yakexi@westos.org>
Date: Sat Apr 30 05:32:07 2022 +0800add readme
[root@server5 demo]# git reflog 查看提交精简日志指令
ed0f05e HEAD@{0}: commit (initial): add readme
[root@server5 demo]# git status -s 查看此文件处于什么状态 没有显示表示文件都已经提交了
[root@server5 demo]# touch file1 再创建一个文件
[root@server5 demo]# git status -s 查看文件处于什么状态
?? file1 表示新建文件,还没有添加到版本库里
[root@server5 demo]# git add file1 添加
[root@server5 demo]# git status -s
A file1 A文件在暂存区
[root@server5 demo]# git commit -m "add file1" 提交 ,用户信息只需要添加一次
[master b58cb3e] add file11 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 file1
[root@server5 demo]# echo westos > file1 在file1文件里修改内容
[root@server5 demo]# git status -sM file1 M在右边表示在工作区进行修改
[root@server5 demo]# git add file1 修改后需要再次添加文件
[root@server5 demo]# git status -s 查看文件处于什么状态
M file1 M在左边表示文件已经在缓存区,但是没有提交,其实就是执行了git add
[root@server5 demo]# echo linux >> file1 再修改文件内容
[root@server5 demo]# git status -s
MM file1 会出现两个M,包括第一次修改已经执行git add 文件状态和第二次修改的内容没有执行git add文件状态
[root@server5 demo]# git add file1 此时是将第二次修改file1文件,提交到暂存区
[root@server5 demo]# git status -s 查看此文件处于什么状态
M file1 文件都处于暂存区
[root@server5 demo]# git commit -m "update file1" 此时去提交
[master 05a080a] update file11 file changed, 2 insertions(+)
文件指令
忽略文件
[root@server5 demo]# touch .a 建立隐藏文件
[root@server5 demo]# mkdir .dir
[root@server5 demo]# cd .dir/
[root@server5 .dir]# touch file2 在隐藏目录里建立文件
[root@server5 .dir]# cd ..
[root@server5 demo]# git status -s 查看文件所处状态
?? .a
?? .dir/
[root@server5 demo]# vim .gitignore 建立忽略文件
.a 指定具体文件
.dir 指定具体目录
.* 通配表示所有
[root@server5 demo]# git status -s 查看文件所处状态 ,将点开头的文件都忽略了
删除文件
[root@server5 demo]# rm -fr file1 删除文件
[root@server5 demo]# git status 查看状态
# On branch master
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory) 提示可用checkout撤销删除的文
#
# deleted: file1
#
no changes added to commit (use "git add" and/or "git commit -a")[root@server5 demo]# git status -s
D file1 查看文件所处状态,表示file1已经删除
[root@server5 demo]# git checkout file1 将文件删除动作撤销
[root@server5 demo]# ls
file1 README.md 可以发现删除的文件file1又回来了
[root@server5 demo]# git rm file1 也可以使用此命令删除文件
rm 'file1'
[root@server5 demo]# git status 查看状态
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: file1
[root@server5 demo]# git reset HEAD file1 取消暂存的文件
[root@server5 demo]# git status -sD file1
[root@server5 demo]# git rm file1 再次执行删除
rm 'file1'
[root@server5 demo]# git status -s
D file1
[root@server5 demo]# git commit -m "delete file1" 提交
[root@server5 demo]# git reflog 查看日志,可以看到每个版本
7f8d2ef HEAD@{0}: commit: delete file1
05a080a HEAD@{1}: commit: update file1
b58cb3e HEAD@{2}: commit: add file1
ed0f05e HEAD@{3}: commit (initial): add readme
提交后也可以进行版本退回
[root@server5 demo]# git reset --hard b58cb3e 退回到添加文件这一步
HEAD is now at b58cb3e add file1
[root@server5 demo]# ls
file1 README.md file1文件已经出现
[root@server5 demo]# cat file1 里面没有内容
[root@server5 demo]# git reset --hard 05a080a 版本退回到更新文件这一步
[root@server5 demo]# cat file1 文件里面已经有内容
westos
linux
[root@server5 demo]# git reset --hard 7f8d2ef 版本退回到删除这一步
HEAD is now at 7f8d2ef delete file1
[root@server5 demo]# ls
README.md
[root@server5 demo]# l. 注意如果把.git文件删除后就找不回来文件了,可以搭建一个私有仓库将git文件传到私有仓库里
. .. .a .dir .git .gitignore
搭建私有仓库gitlab
[root@foundation50 jenkins]# scp gitlab-ce-13.2.2-ce.0.el7.x86_64.rpm server5: 将下载好的软件包拷贝server5上
[root@server5 ~]# rpm -ivh gitlab-ce-13.2.2-ce.0.el7.x86_64.rpm 安装
[root@server5 ~]# yum install -y curl policycoreutils-python openssh-server 安装依赖性
[root@server5 ~]# cd /etc/gitlab/
[root@server5 gitlab]# ls
gitlab.rb
[root@server5 gitlab]# vim gitlab.rb 编辑gitlab配置文件
[root@server5 gitlab]# gitlab-ctl reconfigure 修改配置文件,必须重载配置文件
[root@server5 gitlab]# gitlab-ctl status 查看状态,看是否都运行
设置中文
[root@server5 ~]# ssh-keygen server5上做免密
[root@server5 ~]# cd .ssh/
[root@server5 .ssh]# ls
[root@server5 .ssh]# cat id_rsa.pub 查看公钥
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/I0LEVEk4FTPS9Lf3PCGYUR2+b8q7yR8dJYaQztzQUbXXyNnJZITVXYYhgnkmkIF9GCZTmCa49XFwTAfqvduaCaDLlPOJaC7mZwLOO3/NArsZOJbJFbqIGBtU1BG/29/SlUMGr2Z2kgYIdCBnYuUPEGj8mnskBpOZAUKFilgZXRgmwHuIwv9R251a+SilcOONEz+pAvGjI2dP7MeIHKd8gNe5WAUO52xvsrmyRmNoZS1NkAa57DZH2JnY+OkLp45IduTIp9cAiinyuFW+Blyi7LvwsXN/ruvW72VPEkdyRv+ULvSgnnsCkfMSu/pUf/DOfnikH+XZmYB2bBW1YZWR root@server5
[root@server5 .ssh]# cd
[root@server5 ~]# cd demo/
[root@server5 demo]# git remote add origin git@172.25.50.5:root/demo.git 添加自己的私有仓库 ,如果是公共的可以换成github.com
[root@server5 demo]# git remote -v 显示抓取和上传地址
origin git@172.25.50.5:root/demo.git (fetch)
origin git@172.25.50.5:root/demo.git (push)
[root@server5 demo]# git push -u origin main 推送,第一次推送需要指定main
[root@server5 demo]# touch index.html
[root@server5 demo]# echo www.westos.org > index.html
[root@server3 demo]# git add index.html
[root@server3 demo]# git commit -m "add index.html"
[root@server3 demo]# git push -u origin main
在企业肯定不是本地初始化,在企业已经有了
[root@server3 ~]# rm -fr demo/ 删除本地项目
删除项目
创建项目
[root@server3 ~]# git clone git@172.25.50.3:root/git.git
[root@server3 ~]# ls
git
[root@server3 ~]# cd git/
[root@server3 git]# ls
README.md
[root@server3 git]# git remote -v
origin git@172.25.50.3:root/git.git (fetch)
origin git@172.25.50.3:root/git.git (push)
2. jenkins持续集成
2.1安装及配置:
[root@foundation50 jenkins]# scp jenkins-2.293-1.1.noarch.rpm server4: 将下载的jenkins软件包拷贝到server4上
[root@server4 ~]# yum install jenkins-2.293-1.1.noarch.rpm -y 安装
[root@foundation50 Desktop]# cd /mnt/pub/docs/jenkins/
[root@foundation50 jenkins]# scp jdk-8u171-linux-x64.rpm server4: 将jdk包拷贝到server4上
[root@server4 ~]# [root@server4 ~]# rpm -ivh jdk-8u171-linux-x64.rpm 运行jenkins需要安装jdk
[root@server4 ~]# chkconfig jenkins on 启动jenkins,设置开机自启
[root@server4 init.d]# systemctl start jenkins 也可以用systemctl启动
[root@server4 init.d]# netstat -antlp 查看端口
端口为8080
访问:172.25.50.4:8080
[root@server4 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword 查看密码
bf697eae67284718b6dd5a7b4aeca5b4
登陆后点击安装插件
发现安装失败,国外地址下载太慢
转成国内下载地址
[root@server4 ~]# cd /var/lib/jenkins/ jenkins数据目录
config.xml nodes
hudson.model.UpdateCenter.xml plugins
identity.key.enc secret.key
jenkins.install.InstallUtil.installingPlugins secret.key.not-so-secret
jenkins.telemetry.Correlator.xml secrets
jobs updates
logs userContent
nodeMonitors.xml users
[root@server4 jenkins]# cat hudson.model.UpdateCenter.xml
<?xml version='1.1' encoding='UTF-8'?>
<sites><site><id>default</id><url>https://updates.jenkins.io/update-center.json</url> 这是默认数据更新插件位置</site>
[root@server4 jenkins]# cd updates/
[root@server4 updates]# ls
default.json hudson.tasks.Maven.MavenInstaller
[root@foundation50 jenkins]# scp jenkins-update-center-changer.sh server4: 将shell脚本拷贝到server4上
[root@server4 ~]# export JENKINS_HOME=/var/lib/jenkins 设置环境变量, 此路经/var/lib/jenkins为jenkins的家目录
[root@server4 ~]# sh jenkins-update-center-changer.sh 运行shell脚本
开始执行修改插件更新中心操作...
识别到JENKINS_HOME: /var/lib/jenkins
目录/var/lib/jenkins/update-center-rootCAs创建成功
备份插件更新中心配置文件成功。
修改插件中心配置成功!
特别提醒:
1.Jenkins重启后修改才会生效!
2.重启后不要忘了先进入插件管理页面点击“立即获取”从新地址获取数据!
3.开始享受极速下载的美好体验吧!
[root@server4 ~]# cd /var/lib/jenkins/ 进入数据目录
[root@server4 jenkins]# cat hudson.model.UpdateCenter.xml
[root@server4 jenkins]# systemctl restart jenkins 重启jenkins
重新登陆
http://172.25.50.4:8080/restart 后面可以跟restart跳过安装插件,直接进入界面
[root@server4 jenkins]# cat /var/lib/jenkins/secrets/initialAdminPassword 查看密码,用密码登陆
bf697eae67284718b6dd5a7b4aeca5b4
点击插件
创建项目
确认之前搭建的gitlab仓库是否运行正常,并添加文件
[root@server3 ~]# cd git/
[root@server3 git]# ls
README.md
[root@server3 git]# echo www.westos.org > index.html 创建文件
[root@server3 git]# git add index.html 添加文件到缓存
[root@server3 git]# git commit -m "add index.html" 提交文件
[main 3bdf174] add index.html1 file changed, 1 insertion(+)create mode 100644 index.html
[root@server3 git]# git push -u origin main 上传文件到gitlab仓库
添加源代码地址:
[root@server4 ~]# yum install git -y 安装git
[root@server4 ~]# ssh-keygen 需要做免密
root@server4 ~]# cd .ssh/
[root@server4 .ssh]# ls
id_rsa id_rsa.pub
[root@server4 .ssh]# cat id_rsa.pub 查看公钥
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgcdI+B7hJYb+Vfpd75TJinMIPHZk3vFlH37xECdOMD38QBRJqSCuiQhX0Qeoa9jmN96Rhi/2huPfCesJsq2eJ9p5yz8amIRt0KtierEDS795GgsjqDG4nWuModZ/CGo+3DcT/HrcrjTZZojGhZPj6NA5Px29PihSBrgd/0NRhWeNAMt1gjurQen16Hca+EqIleJx4qWZNJq/as2C0M2Z0Pwl/YC7NMbaqom7Ex6wjES1keIiD9kuZGx9yAYG6qVRE/FpEmo6joUiOGWZFMD+Yv84zxlnFBklpm8OGoOnl3yX67IvHvvO1gDjchUZRWZ5QcpVRxINA40h7/tkv8bpF root@server4
在server3上添加公钥
查看私钥方法:
[root@server4 .ssh]# cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA4HHSPge4SWG/lX6Xe+UyYpzCDx2ZN7xZR9+8RAnTjA9/EAUS
akgrokIV9EHqGvY5jfekYYv9obj3wnrCbKtnifaecs/GpiEbdCrYnqxA0u/eRoLI
6gxuJ1rjKHWfwhqPtw3E/x63K402WaIxoWT4+jQOT8dvT4oUga4Hf9DUYVnjQDLd
YI7q0Hp9eh3GvhKiJXiceKlmTSav2rNgtDNmdD8Jf2AuzTG2qqJuxMesIxEtZHiI
g/ZLmRsfcgGBuqlURPxaRJqOo6FIjhlmRTA/mL/OM8ZZxQZJaZvDhqDp5d8l+uyL
x77ztYA43IVGUVmeUHKVUcSDQONIe/7ZL/G6RQIDAQABAoIBAQDbHMNPY2H54b+T
Rl7EyWCC/N5Gu3KVAv92N2ooUh+AILC/BvSPZZ2TbkjYiHDvmWleu2BzCqO1ekoG
RqoAROVzvpu5IjaggLm4kwue/DLcuueYlp1mQHRZX1VcblhkumGLJ5omJepUTiu9
注:当每次检测,gitlab源代码没有发生变更,构建号时不会发生变化的,只有当发生变更,新的构建号才能发生变化
上面操作时jenkins周期化访问gitlab,我们可以选者gitlab主动触发jenkins,当gitlab上代码发生变化,主动出发jenkins来同步
如下操作:
设置webhooks
再次进入自己的项目
进行测试:
[root@server3 git]# echo www1.westos.org > index.html 变更文件内容
[root@server3 git]# git commit -a -m "update index.html" 提交
[main eabc721] update index.html 1 file changed, 1 insertion(+), 1 deletion(-)[root@server3 git]# git push -u origin main 上传 ,此时项目已经更新了
在jenkins上查看项目有没有再次构建
注:在gitlab主动触发jenkins同步时,jinkins必须下载gitlab插件
由于刚开始jenkis插件没有安装成功,所以没有中文插件,为了方便查看,安装中文插件
搜索chinese,安装中文插件
将代码集成到镜像内,用容器来发布
下载所需插件
配置jenkins
在server4上安装docker
[root@server4 .ssh]# cd /etc/yum.repos.d/
[docker]
name=docker-ce
baseurl=http://172.25.50.250/docker-ce
gpgcheck=0
[root@server4 yum.repos.d]# yum install docker-ce -y 安装dokcer-ce
[root@server4 yum.repos.d]# systemctl enable --now docker 启动docker
[root@server4 yum.repos.d]# vim /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
[root@server4 yum.repos.d]# sysctl --system 使之生效
[root@foundation50 html]# cd /mnt/pub/docker/
[root@foundation50 docker]# scp daemon.json server4:/etc/docker/ 将老师的的阿里云加速器拷贝到server4的docker目录里,也可以用自己的
[root@server4 docker]# systemctl restart docker
[root@server4 docker]# docker pull nginx 拉取基础镜像nginx
[root@server4 docker]# ll /var/run/docker.sock 查看docker引擎位置
srw-rw---- 1 root docker 0 May 9 06:27 /var/run/docker.sock
[root@server4 docker]# ps aux 查看jenkins所使用的用户,jenkins用户所使用的用户为jenkins,jenkins用户对docker引擎没有操作权限
[root@server4 docker]# chmod 777 /var/run/docker.sock 为了方便直接给777的权限,但是以重启权限会被还原为660
所以可以将docker用户作为jenkins的附加组
[root@server4 docker]# usermod -G docker jenkins
[root@server3 git]# vim Dockerfile
FROM nginx
COPY index.html /usr/share/nginx/html
[root@server3 git]# git add Dockerfile 添加
[root@server3 git]# git commit -m "add Dockerfile" 提交
[main bf09954] add Dockerfile1 file changed, 3 insertions(+)create mode 100644 Dockerfile
[root@server3 git]# git push -u origin main 推送
在jenkins上查看构建历史
jenkins将gitlab上的代码复制到 cd /var/lib/jenkins/workspace/test 此目录
[root@server4 test]# ls
Dockerfile index.html README.md
jenkins拿到代码Dockerfile后通过docker.sock引擎来构建镜像
[root@server4 test]# docker images 查看镜像,
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:5000/webserver 4 15840a703cc6 39 minutes ago 141MB 其中4表示第4次构建,
localhost:5000/webserver latest 15840a703cc6 39 minutes ago 141MB 每次构建都会映射为最新版
nginx latest 605c77e624dd 4 months ago 141MB
[root@server4 test]# docker run -d --name demo localhost:5000/webserver:latest 运行容器
07be3f48f859b31873d6bd72339ba4184e5b4860e49749dcf1896e9c22deaef0
[root@server4 test]# docker ps 查看,运行成功
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
07be3f48f859 localhost:5000/webserver:latest "/docker-entrypoint.…" 13 seconds ago Up 11 seconds 80/tcp demo
[root@server4 test]# docker inspect demo 查看容器详细信息"IPAddress": "172.17.0.2", 查看ip地址为172.17.0.2"IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:11:00:02","Networks": {
访问
[root@server4 test]# curl 172.17.0.2
www1.westos.org
[root@server3 git]# vim index.html 变更文件
www1.westos.org
www1.westos.org
www1.westos.org
www1.westos.org
[root@server3 git]# git commit -a -m "v1" 提交
[main ed21bb1] v11 file changed, 3 insertions(+)
[root@server3 git]# git push -u origin main 推送
在jenkins上查看构建历史
[root@server4 test]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:5000/webserver 5 53053c965227 15 minutes ago 141MB
localhost:5000/webserver latest 53053c965227 15 minutes ago 141MB
localhost:5000/webserver 4 15840a703cc6 About an hour ago 141MB
nginx latest 605c77e624dd 4 months ago 141MB
[root@server4 test]# docker rm -f demo 将之前的删除
demo
[root@server4 test]# docker run -d --name demo localhost:5000/webserver:latest 重新运行容器
[root@server4 test]# curl 172.17.0.2
www1.westos.org
www1.westos.org
www1.westos.org
www1.westos.org
具体流程:用户user通过git将代码push到gitlab仓库然后gitlab通过我们定义的webhook去触发jinkins,jenkins调用插件(docker plugen)通过dockerfile来构建images ,然后将images push到我们的仓库中
搭建本地仓库用于构建的镜像上传
[root@server4 test]# docker pull registry 拉取仓库
[root@server4 test]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry 运行
[root@server4 test]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd91726c3833 registry "/entrypoint.sh /etc…" 5 seconds ago Up 4 seconds 0.0.0.0:5000->5000/tcp registry
e74ea5e2241f localhost:5000/webserver:latest "/docker-entrypoint.…" 14 minutes ago Up 14 minutes 80/tcp demo
[root@server4 ~]# curl localhost:5000/v2/_catalog 镜像已经推送到了本地仓库
{"repositories":["webserver"]}
[root@server4 ~]# curl localhost:5000/v2/webserver/tags/list
{"name":"webserver","tags":["6","latest"]}
再次新建一个项目,用于测试仓库里的镜像
[root@server4 ~]# cat /etc/passwd 查看jenkins用户
jenkins:x:998:996:Jenkins Automation Server:/var/lib/jenkins:/bin/false 可以发现jenkins不能登陆
[root@server4 ~]# usermod -s /bin/bash jenkins 更改用户为可以登陆
[root@server4 ~]# su - jenkins 登陆用户
[root@server4 ~]# su - jenkins
-bash-4.2$ docker run -d --name webserver localhost:5000/webserver 可以发现普通用户jenkins可以运行docker,因为jenkins已经被我们加到docker组里面
72c6f6a4015f4c1950ef330d8f19ba69c1704a55771085b32d42c4d951181d3d
-bash-4.2$ docker rm -f webserver 删除
webserver
[root@server3 git]# vim index.html 变更文件内容
www1.redhat.org
www1.redhat.org
www1.redhat.org
www1.redhat.org
[root@server3 git]# git commit -a -m "v2" 提交
[root@server3 git]# git push -u origin main 推送
[root@server4 ~]# su - jenkins
Last login: Tue May 10 06:48:13 CST 2022 on pts/0
-bash-4.2$ curl localhost 访问成功,容器运行成功
www1.redhat.org
www1.redhat.org
www1.redhat.org
www2.redhat.org
将构建主机移到远程
再开一台虚拟机server5,安装docker将构建任务放在server5上
由于docker只能内部访问,外部不能访问,所以需要需要启用docker外部连接端口,需要生成证书和key
[root@server5 ~]# openssl genrsa -aes256 -out ca-key.pem 4096 生成ca的key
Generating RSA private key, 4096 bit long modulus
..........................................................................................................................++
.....................................................................................................................++
e is 65537 (0x10001)
Enter pass phrase for ca-key.pem:
Verifying - Enter pass phrase for ca-key.pem:
[root@server5 ~]# openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem 生成证书
Enter pass phrase for ca-key.pem:
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:shaanxi
Locality Name (eg, city) [Default City]:xi'an
Organization Name (eg, company) [Default Company Ltd]:westos
Organizational Unit Name (eg, section) []:linux
Common Name (eg, your name or your server's hostname) []:server7 主机名
Email Address []:root@westos.org
[root@server5 ~]# ls
ca-key.pem ca.pem key和证书生成成功
[root@server5 ~]# openssl genrsa -out server-key.pem 4096 生成server—key
Generating RSA private key, 4096 bit long modulus
...........................................................++
...............................................................................................................................................................................++
e is 65537 (0x10001)
[root@server5 ~]# openssl req -subj "/CN=server5" -sha256 -new -key server-key.pem -out server.csr 生成一个证书的请求csr
[root@server5 ~]# echo subjectAltName = DNS:server5,IP:172.25.50.5,IP:127.0.0.1 >> extfile.cnf 生产一个文件,可以使用ip访问
[root@server5 ~]# echo extendedKeyUsage = serverAuth >> extfile.cnf 将server认证放入文件
[root@server5 ~]# openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf 生成证书
Signature ok
subject=/CN=server5
Getting CA Private Key
Enter pass phrase for ca-key.pem: 输入密码
[root@server5 ~]# ls
ca-key.pem ca.srl server-cert.pem server-key.pem server证书和key生成成功
ca.pem extfile.cnf server.csr
有了这些证书就可以启用docker外部连接端口
[root@server5 ~]# cp ca.pem server-cert.pem server-key.pem /etc/docker/ 拷贝证书到docker目录
[root@server5 ~]# systemctl status docker 当前docker是通过systemd脚本运行的
● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) docker服务文件位置
[root@server5 ~]# cp /usr/lib/systemd/system/docker.service /etc/systemd/system/docker.service 拷贝一份docker服务文件到/etc/systemd/system/docker.service
[root@server5 ~]# 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
在containerd.sock后跟上开启tlskey校验,指定ca证书和key,server证书路经和key,指定对外暴露端口2376
[root@server5 ~]# systemctl daemon-reload 重载
[root@server5 ~]# systemctl restart docker 重启docker
[root@server5 ~]# netstat -antlupe 查看端口
更改test项目配置
[root@server5 ~]# openssl genrsa -out key.pem 4096 生成客户端key
[root@server5 ~]# openssl req -subj '/CN=client' -new -key key.pem -out clent.csr 生成证书请求
[root@server5 ~]# echo extendedKeyUsage = clientAuth >> extfile.cnf 客户端认证
[root@server5 ~]# openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf 生成证书
Signature ok
subject=/CN=client
Getting CA Private Key
Enter pass phrase for ca-key.pem: 输入密码
添加认证:
habor仓库在学习k8s已经搭建过了
[root@server1 docker]# scp -r certs.d/ server5:/etc/docker/ 将证书拷贝到server5上
[root@server5 ~]# vim /etc/hosts 添加解析
172.25.50.1 server1 reg.westos.org
[root@server4 ~]# docker rm -f registry 删除私有仓库
registry
[root@server4 docker]# vim daemon.json
{"registry-mirrors": ["https://reg.westos.org"] 将镜像仓库地址改成harbor仓库reg.westos.org
}
[root@server4 docker]# systemctl restart docker 重启docker
还需要证书才能登陆仓库
[root@server4 docker]# mkdir certs.d
[root@server4 docker]# cd certs.d/
[root@server4 certs.d]# mkdir reg.westos.org
[root@server4 certs.d]# cd reg.westos.org/
[root@server1 certs]# scp westos.org.crt server4:/etc/docker/certs.d/reg.westos.org/ca.crt 将证书拷贝到server4上reg.westos.org目录里
[root@server4 reg.westos.org]# vim /etc/hosts 添加解析
172.25.50.1 server1 reg.westos.org
[root@server4 reg.westos.org]# docker images | grep ^localhost | awk '{system("docker rmi "$1":"$2"")}' 删除server4当前所有镜像
进入jenkins 上的docker test项目,更改配置
测试:
[root@server3 git]# vim index.html 更改文建
www.linux.org
www.linux.org
www.linux.org
www.linux.org
[root@server3 git]# git commit -a -m "v3" 提交
[root@server3 git]# git push -u origin main 上传
[root@server4 ~]# ll /var/run/docker.sock
srw-rw---- 1 root docker 0 May 13 05:39 /var/run/docker.sock 可以发现权限变成了660
为了使docker重启权限不改变
[root@server4 ~]# visudo 编辑sudo
[root@server4 ~]# docker pull webserver server4上拉取webserver
[root@foundation50 ~]# curl 172.25.50.4 访问成功
www.linux.org
www.linux.org
www.linux.org
www.linux.org
整体思路:
持续集成与持续交付(一)—git工具使用、jenkins持续集成相关推荐
- Jenkins持续集成入门到精通
Jenkins持续集成入门到精通 文章目录 Jenkins持续集成入门到精通 1. 持续集成及Jenkins介绍 1.1 软件开发生命周期 1.2 软件开发瀑布模型 1.3 软件的敏捷开发 1.3.1 ...
- 半天搭建你的Jenkins持续集成与自动化部署系统
前言 相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛.由于我们所做的系统业务复杂,系统庞大,设计到多个系统之间的合作,而核心系统更是采用分布式系统架构,由 ...
- Jenkins持续集成学习-Windows环境进行.Net开发4
目录 Jenkins持续集成学习-Windows环境进行.Net开发4 目录 前言 目标 Github持续集成 提交代码到Github 从Github更新代码 git上显示构建状态 自动触发构建 Gi ...
- Jenkins持续发布解决方案
Jenkins持续发布解决方案 参考文章: (1)Jenkins持续发布解决方案 (2)https://www.cnblogs.com/facethesea/p/7978598.html (3)htt ...
- CI/CD(持续集成构建/持续交付):如何测试/集成/交付项目代码?(Jenkins,TravisCI)
Table of Contents CI(Continuous integration,持续集成) CD(Continuous Delivery, 持续交付) Different types of t ...
- CI/CD——构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台
构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台 CI/CD是什么? 持续集成(CI)/持续交付(CD)的优势 自动化部署流程图 Git Github Gi ...
- Jenkins持续集成部署工具
目录 1 持续集成 1.1 软件开发生命周期 1.2 软件开发瀑布模型 1.3 软件的敏捷开发 1.4 什么是持续集成 1.5 持续集成的好处 2 Jenkins安装配置 2.1 Jenkins介绍 ...
- jenkins持续集成与持续交付
目录 一.jenkins简介 1.jenkins 2.CI/CD是什么? 二.jenkins的部署 1.环境准备 2.安装jenkins 3.更新插件源 三.jenkins项目管理配置 1.项目创建 ...
- Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果...
为了规范代码,我们一般会集成静态代码检测工具,比如PMD.FindBugs.Checkstyle,那么Jenkins如何集成这些检查工具,并把检查结果放到构建邮件里呢? 今天做了调研和实现,过程如下 ...
最新文章
- 分库分表架构实践(文末送书)
- 人类“换头术”现在就是一场炒作 但医学界不会放弃研究
- photoshop图像滤镜——素描算法(含matlab与C代码)
- linux 查看主板sn_如何在 Linux 上查找硬件规格
- oracle配置控制文件快照的位置以及名称为,oracle的备份与恢复
- Android通过命令连接wifi(解决usb不能用+无屏幕情况)
- 云智能时代,开源软件的演进历程
- Jmeter安装及使用教程
- 互联网+电子招投标,正成为一种趋势
- Vue3:基础学习笔记
- 电脑变wifi 用电脑建立无线网
- 如何判断BUG是前端BUG还是后端BUG
- 塑料壳上下扣合的卡扣设计_塑胶件结构设计之止口与扣位的设计
- 系统辨识的几种方法实现MATLAB代码
- 如何在命令行窗口运行某个文件夹下的exe程序
- 利用Vlan实现家庭网络单线复用
- Atom 打造无懈可击的 Markdown 编辑器
- MSM8974 上DeviceTree
- 全年销售完成目标,远洋集团的根本问题却仍未解决
- 三面(技术+HR面试)网易,分享我的面试经验!(已拿offer)