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持续集成相关推荐

  1. Jenkins持续集成入门到精通

    Jenkins持续集成入门到精通 文章目录 Jenkins持续集成入门到精通 1. 持续集成及Jenkins介绍 1.1 软件开发生命周期 1.2 软件开发瀑布模型 1.3 软件的敏捷开发 1.3.1 ...

  2. 半天搭建你的Jenkins持续集成与自动化部署系统

    前言 相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛.由于我们所做的系统业务复杂,系统庞大,设计到多个系统之间的合作,而核心系统更是采用分布式系统架构,由 ...

  3. Jenkins持续集成学习-Windows环境进行.Net开发4

    目录 Jenkins持续集成学习-Windows环境进行.Net开发4 目录 前言 目标 Github持续集成 提交代码到Github 从Github更新代码 git上显示构建状态 自动触发构建 Gi ...

  4. Jenkins持续发布解决方案

    Jenkins持续发布解决方案 参考文章: (1)Jenkins持续发布解决方案 (2)https://www.cnblogs.com/facethesea/p/7978598.html (3)htt ...

  5. CI/CD(持续集成构建/持续交付):如何测试/集成/交付项目代码?(Jenkins,TravisCI)

    Table of Contents CI(Continuous integration,持续集成) CD(Continuous Delivery, 持续交付) Different types of t ...

  6. CI/CD——构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台

    构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台 CI/CD是什么? 持续集成(CI)/持续交付(CD)的优势 自动化部署流程图 Git Github Gi ...

  7. Jenkins持续集成部署工具

    目录 1 持续集成 1.1 软件开发生命周期 1.2 软件开发瀑布模型 1.3 软件的敏捷开发 1.4 什么是持续集成 1.5 持续集成的好处 2 Jenkins安装配置 2.1 Jenkins介绍 ...

  8. jenkins持续集成与持续交付

    目录 一.jenkins简介 1.jenkins 2.CI/CD是什么? 二.jenkins的部署 1.环境准备 2.安装jenkins 3.更新插件源 三.jenkins项目管理配置 1.项目创建 ...

  9. Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果...

    为了规范代码,我们一般会集成静态代码检测工具,比如PMD.FindBugs.Checkstyle,那么Jenkins如何集成这些检查工具,并把检查结果放到构建邮件里呢? 今天做了调研和实现,过程如下 ...

最新文章

  1. 分库分表架构实践(文末送书)
  2. 人类“换头术”现在就是一场炒作 但医学界不会放弃研究
  3. photoshop图像滤镜——素描算法(含matlab与C代码)
  4. linux 查看主板sn_如何在 Linux 上查找硬件规格
  5. oracle配置控制文件快照的位置以及名称为,oracle的备份与恢复
  6. Android通过命令连接wifi(解决usb不能用+无屏幕情况)
  7. 云智能时代,开源软件的演进历程
  8. Jmeter安装及使用教程
  9. 互联网+电子招投标,正成为一种趋势
  10. Vue3:基础学习笔记
  11. 电脑变wifi 用电脑建立无线网
  12. 如何判断BUG是前端BUG还是后端BUG
  13. 塑料壳上下扣合的卡扣设计_塑胶件结构设计之止口与扣位的设计
  14. 系统辨识的几种方法实现MATLAB代码
  15. 如何在命令行窗口运行某个文件夹下的exe程序
  16. 利用Vlan实现家庭网络单线复用
  17. Atom 打造无懈可击的 Markdown 编辑器
  18. MSM8974 上DeviceTree
  19. 全年销售完成目标,远洋集团的根本问题却仍未解决
  20. 三面(技术+HR面试)网易,分享我的面试经验!(已拿offer)

热门文章

  1. java 实现excel中上下角标处理实现原理
  2. Q10:调试QTI综测源码
  3. 河南工学院计算机应用基础答案,历年自考《计算机应用基础》精选习题六
  4. H3C交换机、Dlink交换机、Netgear网件交换机 开启SSH 登录、修改snmp设置
  5. clion opencv 最简教程
  6. 吉林大学超星慕课平台——高级语言程序设计 实验03 模块化程序设计(2022级)
  7. 如何选择靠谱的软件测试培训机构,请注意一下九点!
  8. 时间转换格式比较大小
  9. 【硬件工程师学软件】之 软件架构
  10. 软考总结--数据加密与认证技术