暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

原创|NO.B.0007|——|DevOps|Jenkins|CI/CD+K8S|部署Harbor重置密码|maven|Git|

Java BBS 2021-05-23
1781

第4天 CI/CD+K8S综合实战

一、部署流程

1、研发push到github代码库

2、Jenkins 构建,pull git代码 使用maven进行编译打包

3、打包生成的代码,生成一个新版本的镜像,push到本地docker仓库harbor

4、发布,测试机器 pull 新版本的镜像,并删除原来的容器,重新运行新版本镜像。

5、部署环境:

git+jenkins(git+mvn+docker)habor+k8s

二、环境说明

服务及服务器说明-Aliyun环境

1、代码仓库           

  • github 或者 git-server 或者 gitlab

  • 本次实验使用github仓库 https://github.com/

2、环境规划

#2、容器镜像仓库 
// centos7.x 私有:10.10.10.11 公有:192.168.1.11 // harbor服务器
#3、CI/CD服务器
// centos7.x 私有:10.10.10.12 公有:192.168.1.12 // jenkins服务器
# 软件:
// jdk
// jenkins
// git
// maven
// docker
#4、应用服务器
// centos7.x 私有:10.10.10.13 公有:192.168.1.13 // docker服务器
# 软件:
// jq
// docker OR k8s集群
#5、Git服务器
// centos7.x 私有:10.10.10.14 公有:192.168.1.14 // Git服务器

三、部署Harbor镜像仓库

1、下载安装

#在 centos7.x 10.10.10.11 192.168.1.11 Harbor服务器部署操作


#官方地址:https://github.com/goharbor/harbor/releases //下载离线安装包:需要翻墙
[root@harbor ~]# wget -c https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.0.tgz
yum -y install lrzsz


#1、安装compose
[root@harbor ~]# curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 633 0 633 0 0 1010 0 --:--:-- --:--:-- --:--:-- 1011
100 11.2M 100 11.2M 0 0 89656 0 0:02:11 0:02:11 --:--:-- 133k
// uname -s:查看系统版本
// uname -m:查看的是CPU平台,CPU架构
// -o:存储路径
[root@harbor ~]# chmod +x /usr/local/bin/docker-compose


#2、启动harbor之前先启动docker:对版本要求不是很严格。
//配置阿里云docker仓库
[root@harbor ~]# yum install -y yum-utils device-mapper-persitent-data lvm2 git
//安装docker扩展源
[root@harbor ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
OR
[root@harbor ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@harbor ~]# yum list docker-ce --showduplicates|sort -r // 查看可以选择的docker版本
//安装docker
[root@harbor ~]# yum install -y docker-ce-17.06.0.ce-1.el7.centos.x86_64
[root@harbor ~]# systemctl start docker
[root@harbor ~]# docker -v
Docker version 17.06.0-ce, build 02c1d87


#3、配置harbor
[root@harbor ~]# tar -zxvf harbor-offline-installer-v2.0.0-rc3.tgz
[root@harbor ~]# cd harbor/
[root@harbor harbor]# cp harbor.yml.tmpl harbor.yml
[root@harbor harbor]# vim harbor.yml // 主机名要可以解析(需要部署dns服务器,用/etc/hosts文件没有用),如果不可以解析,可以使用IP地址,需要修改的内容如下
hostname: 10.10.10.11
#https: //如果要用https这里就需要改,现在我们先不用https,这里不需要改
# https port for harbor, default is 443 //注销https
# port: 443
# The path of cert and key files for nginx
#certificate: /your/certificate/path
#private_key: /your/private/key/path
[root@harbor harbor]# ./install.sh
[Step 5]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating redis ... done
Creating harbor-portal ... done
Creating registryctl ... done
Creating harbor-db ... done
Creating registry ... done
Creating harbor-core ... done
Creating harbor-jobservice ... done
Creating nginx ... done
✔ ----Harbor has been installed and started successfully.----
[root@harbor harbor]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
goharbor/chartmuseum-photon v2.0.0 4db8d6aa63e9 10 months ago 127MB
goharbor/redis-photon v2.0.0 c89ea2e53cc0 10 months ago 72.2MB
goharbor/trivy-adapter-photon v2.0.0 6122c52b7e48 10 months ago 103MB
[root@harbor harbor]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a7efd7e381c4 goharbor/nginx-photon:v2.0.0 "nginx -g 'daemon ..." 3 minutes ago Up 3 minutes (healthy) 0.0.0.0:80->8080/tcp nginx
baf75468ed29 goharbor/harbor-jobservice:v2.0.0 "/harbor/entrypoin..." 3 minutes ago Up 3 minutes (healthy) harbor-jobservice


#问题一:
[root@harbor harbor]# ./install.sh
[Step 0]: checking if docker is installed ...
Note: docker version: 1.13.1
✖ Need to upgrade docker package to 17.06.0+.
#解决方案:升级docker
[root@harbor ~]# docker -v
Docker version 17.06.0-ce, build 02c1d87

浏览器访问测试:

http://10.10.10.11   

http://192.168.1.11

用户名:admin 密码:Harbor12345

创建仓库:项目——>新建项目

创建账户:用户管理——>创建用户

项目授权:授为管理员

仓库进行导入测试

2、测试Harbor:上传测试

#在 centos7.x 10.10.10.12 192.168.1.12jenkins下部署操作


#1、部署docker
[root@jenkins ~]# yum install -y yum-utils device-mapper-persitent-data lvm2 git
//安装docker扩展源
[root@jenkins ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
OR
[root@jenkins ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@jenkins ~]# yum list docker-ce --showduplicates|sort -r #查看可以选择的docker版本
//安装docker
[root@jenkins ~]# yum install -y docker-ce-17.06.0.ce-1.el7.centos.x86_64
[root@jenkins ~]# systemctl start docker
[root@jenkins ~]# docker -v
Docker version 17.06.0-ce, build 02c1d87


#2、harbor私有仓库测试:
[root@jenkins ~]# docker login 10.10.10.11:80 #登入docker服务器
Username: yanqi
Password: Harbor12345
Error response from daemon: Get https://10.10.10.11:80/v2/: http: server gave HTTP response to HTTPS client
// 作为私有仓库的客户端默认情况下使用的是https;需要把daemon.json文件修改一下。
[root@jenkins ~]# vim /etc/docker/daemon.json
{ "insecure-registries":["10.10.10.11:80"] } #harbor地址
[root@jenkins ~]# systemctl restart docker #重启docker
[root@jenkins ~]# docker login 10.10.10.11:80 #登入docker服务器
Username: yanqi
Password: Harbor12345
Login Succeeded


[root@jenkins ~]# docker pull nginx
[root@jenkins ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 7ce4f91ef623 4 hours ago 133MB
[root@jenkins ~]# docker tag nginx 10.10.10.11:80/jenkins/nginx:v0 #为镜像打包标签tag
[root@jenkins ~]# docker push 10.10.10.11:80/jenkins/nginx:v0 #将打包标签的镜像上传到私有仓库中
The push refers to a repository [10.10.10.11:80/jenkins/nginx]
1914a564711c: Pushed
db765d5bf9f8: Pushed
903ae422d007: Pushed
66f88fdd699b: Pushed
2ba086d0a00c: Pushed
346fddbbb0ff: Pushed
v0: digest: sha256:c137f6c852bfdf74694fe20693bb11e61b51e0b8c50d17dff881f2db05e65de9 size: 1570
#在web界面中查看镜像是否被上传到仓库中

#删除手动创建的镜像
[root@jenkins ~]# docker images
10.10.10.11:80/jenkins/nginx v0 7ce4f91ef623 4 hours ago 133MB
[root@jenkins ~]# docker rmi 10.10.10.11:80/jenkins/nginx:v0
#拉取镜像
[root@jenkins ~]# docker pull 10.10.10.11:80/jenkins/nginx@sha256:c137f6c852bfdf74694fe20693bb11e61b51e0b8c50d17dff881f2db05e65de9
sha256:c137f6c852bfdf74694fe20693bb11e61b51e0b8c50d17dff881f2db05e65de9: Pulling from jenkins/nginx
Digest: sha256:c137f6c852bfdf74694fe20693bb11e61b51e0b8c50d17dff881f2db05e65de9
Status: Image is up to date for 10.10.10.11:80/jenkins/nginx@sha256:c137f6c852bfdf74694fe20693bb11e61b51e0b8c50d17dff881f2db05e65de9
#查看进项
[root@jenkins ~]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 7ce4f91ef623 4 hours ago 133MB
10.10.10.11:80/jenkins/nginx <none> 7ce4f91ef623 4 hours ago 133MB

如何重启harbor

[root@harbor ~]# cd harbor/
[root@harbor harbor]# docker-compose down
[root@harbor harbor]# vim harbor.yml
[root@harbor harbor]# ./prepare
[root@harbor harbor]# docker-compose up -d

【扩展】重置Harbor登陆密码

// harbor现使用postgresql 数据库。不再支持mysql
#注:卸载重新重新安装也不可以,原因是没有删除harbor的数据,harbor数据在/data/目录下边,如果真要重新安装需要将这个也删除,备份或者迁移,请使用这个目录的数据。


#harbor版本为:1.8.0
#官方的安装包为:harbor-offline-installer-v1.8.0.tgz


#具体步骤:
#1、进入[harbor-db]容器内部
[root@harbor ~]# docker exec -it harbor-db /bin/bash
postgres [ / ]$


#2、进入postgresql命令行,
postgres [ / ]$ psql -h postgresql -d postgres -U postgres #这要输入默认密码:root123
Password for user postgres: root123
postgres [ / ]$ psql -U postgres -d postgres -h 127.0.0.1 -p 5432 #或者用这个可以不输入密码。
psql (9.6.14)
Type "help" for help
#3、切换到harbor所在的数据库
postgres=# \c registry
You are now connected to database "registry" as user "postgres".


#4、查看harbor_user表
registry=# select * from harbor_user;
user_id | username | email | password | realname | comment | deleted | reset_uuid | salt | sysadmin_
flag | creation_time | update_time | password_version
---------+-----------+--------------------+----------------------------------+----------------+----------------+---------+------------+----------------------------------+----------
-----+----------------------------+----------------------------+------------------
2 | anonymous | | | anonymous user | anonymous user | t | | | f
| 2021-03-31 08:22:54.937769 | 2021-03-31 08:22:55.189956 | sha1
1 | admin | | 5705da1ab03816503271011bb6a80ce9 | system admin | admin user | f | | u4ymc25ssuvgupbivm9kdhijx4t2xl3r | t
| 2021-03-31 08:22:54.937769 | 2021-03-31 08:22:55.327036 | sha256
3 | yanqi | yanqi_vip@yeah.net | 54302f28a2504ff2dcff03e8fc6be519 | yanqi | yanqi | f | | 8nyocqzplw0nys70hpwxx9w44dmp3l3s | t
| 2021-03-31 08:35:43 | 2021-03-31 08:37:06.60932 | sha256
(3 rows)


#5、例如修改admin的密码,修改为初始化密码Harbor12345 ,修改好了之后再可以从web ui上再改一次。
registry=# update harbor_user set password='5705da1ab03816503271011bb6a80ce9', salt='u4ymc25ssuvgupbivm9kdhijx4t2xl3r' where username='admin';
UPDATE 1
#6、退出 \q 退出postgresql,exit退出容器。
registry=# \q
postgres [ / ]$ exit


#完成后通过WEB UI,就可以使用admin 、Harbor12345 这个密码登录了,记得修改这个默认密码哦,避免安全问题。
#有更加狠点的招数,将admin账户改成别的名字,减少被攻击面:
registry=# update harbor_user set username='yanqi' where user_id=1; #更改admin用户名为yanqi

3、Dockerfile文件

#在 centos7.x 10.10.10.12 jenkins服务器中配置
[root@jenkins ~]# mkdir -p /root/jenkins/docker-file/maven-docker-test_war
[root@jenkins ~]# vim /root/jenkins/docker-file/maven-docker-test_war/Dockerfile
# Version 1.0
# Base images.
FROM tomcat:8.0.36-alpine


# Author.
MAINTAINER yanqi <yanqi_vip@yeah.net>


# Add war.
ADD maven-docker-test.war /usr/local/tomcat/webapps/


# Define working directory.
WORKDIR /usr/local/tomcat/bin/


# Define environment variables.
ENV PATH /usr/local/tomcat/bin:$PATH


# Define default command.
CMD ["catalina.sh", "run"]


# Expose ports.
EXPOSE 8080

4、Harbor权限相关

harbor仓库的权限得配置一下,不然curl命令访问不到

四、业务服务器

1、安装软件

#在centos7.x 10.10.10.13 192.168.1.13 docker应用服务器部署。


#1、部署docker
[root@docker ~]# yum install -y yum-utils device-mapper-persitent-data lvm2 git
//安装docker扩展源
[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
OR
[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@docker ~]# yum list docker-ce --showduplicates|sort -r #查看可以选择的docker版本
//安装docker
[root@docker ~]# yum install -y docker-ce-17.06.0.ce-1.el7.centos.x86_64
[root@docker ~]# systemctl start docker
[root@docker ~]# docker -v
Docker version 17.06.0-ce, build 02c1d87


# 安装jq
# jq官网:https://github.com/stedolan/jq/releases/download/jq-1.5/jq-1.5.tar.gz
[root@docker ~]# wget -c https://github.com/stedolan/jq/releases/download/jq-1.5/jq-1.5.tar.gz
[root@docker ~]# tar -zxvf jq-1.5.tar.gz
[root@docker ~]# cd jq-1.5
[root@docker jq-1.5]# yum install -y gcc*
[root@docker jq-1.5]# ./configure && make && sudo make install
// 后面的脚本会用到,jq类似于sed/awk专门处理json格式的文件

2、预先配置

#在centos7.x 10.10.10.13 192.168.1.13 docker业务机器上配置:
[root@docker ~]# visudo #为了后期配置执行脚本,否则没有执行权限
#Defaults requiretty
Defaults:root !requiretty


# 否则在机器业务机器上执行脚本时会报错:
[SSH] executing...
sudo: sorry, you must have a tty to run sudo
docker: invalid reference format.

五、Jenkins服务部署配置

1、软件安装

#在centos7.2 10.10.10.12 192.168.1.12 jenkins服务器配置


[root@jenkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@jenkins ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
[root@jenkins ~]# yum install -y jenkins git maven
[root@jenkins ~]# java -version #查看java是否已经安装
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (build 1.8.0_282-b08)
OpenJDK 64-Bit Server VM (build 25.282-b08, mixed mode)
[root@jenkins ~]# systemctl start jenkins
[root@jenkins ~]# ps -ef|grep jenkins
jenkins 20817 1 99 21:40 ? 00:00:15 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
root 20854 20503 0 21:40 pts/0 00:00:00 grep --color=auto jenkins
#查看启动的8080端口
[root@jenkins ~]# lsof -i:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 20817 jenkins 147u IPv6 94236 0t0 TCP *:webcache (LISTEN)

2、预先配置

#由于在Jenkins机器上docker是使用root用户运行的,而Jenkins是使用普通用户jenkins运行的,所以要先配置下jenkins用户可以使用docker命令。
[root@docker ~]# visudo
jenkins ALL=(root) NOPASSWD: /usr/bin/docker
#另外在Jenkins机器上配置:
Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
You have to run "ssh -t hostname sudo <cmd>".
#Defaults requiretty
Defaults:jenkins !requiretty
#确认
[root@docker ~]# which docker #通过该命令查看docker的命令是否在/usr/bin/下
/usr/bin/docker


#如果不配置这个,在执行下面脚本时,会报错误:
+ cp -f /home/jenkins/.jenkins/workspace/godseyeBranchForNov/godseye-container/target/godseye-container-wisedu.war /home/jenkins/docker-file/godseye_war/godseye.war
+ sudo docker login -u jkzhao -p Wisedu123 -e 01115004@wisedu.com 172.16.206.32
sudo: sorry, you must have a tty to run sudo

3、安装插件

  • 浏览器登录Jenkins:

    • http://10.10.10.12:8080,

    • http://192.168.1.12:8080进行初始化配置

  • 点击“系统管理”,点击“管理插件”,搜索插件"Maven Integration"和"SSH",进行安装。



  • SSH安装完成后为:SSH Plugin

查看初始化密码

[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
4a19650966bb42978f33f7f5e879644b

4、配置远程机器:登录Jenkins,点击“Credentials”,点击“Add domain”。

  Dashboard——>Manage Jenkins——>Manage Credentials——>Jenkins:添加域:域名/描述/OK——>返回到添加凭据域列表——>docker——>添加凭据——>添加一些凭据——>确定——>END

点击“系统管理”,“系统配置”,找到“SSH remote hosts”。

Dashboard——>Manage Jenkins——>Configure System——>SSH remote hosts——>Check connection——>保存——>END

——>部署git服务器<——

1、部署GIT

#在centos7.x 10.10.10.14 git 服务器                                             // 服务器进行如下操作


#1.1、安装 git服务器端
[root@git ~]# yum install -y git
// 创建git用户并设置密码为1qaz2wsx(为开发人员拉代码时设置的用户)
[root@git ~]# useradd git
[root@git ~]# passwd git
#1.2、创建仓库
[root@git ~]# su - git // 切换到git用户下
[git@git ~]$ mkdir easy-springmvc-maven.git/ // 在git用户家目录下创建一个repos目录,repos目录下创建各个项目的目录
[git@git ~]$ cd easy-springmvc-maven.git/
[git@git easy-springmvc-maven.git]$ git --bare init // 初始化仓库,如果不初始化,这仅仅就只是一个目录
[git@git easy-springmvc-maven.git]$ ls -a
. .. branches config description HEAD hooks info objects refs // 查看初始化后仓库信息
// 配置完仓库后,我们需要找一台机器测试是否能够成功从仓库中拉取代码,或者上传代码到该仓库。


#IP:10.10.10.12,jenkins服务器进行测试
#1.3、安装 git 客户端:拉取代码
[root@jenkins ~]# yum install -y git // 首先还是安装git
[root@jenkins ~]# git clone git@10.10.10.14:/home/git/easy-springmvc-maven.git // 测试clone远端git仓库
[root@jenkins ~]# ls
easy-springmvc-maven


#1.4、push 测试
[root@jenkins easy-springmvc-maven]# touch index.html
[root@jenkins easy-springmvc-maven]# git add .
[root@jenkins easy-springmvc-maven]# git commit -m "jenkins"
// 第一次的话会有报错警告,说让配置邮箱和姓名。配置一下即可,或者直接执行给出的命令执行即可。
// 报错信息
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
// 解决方案
[root@jenkins easy-springmvc-maven]# git config --global user.email "yanqi_vip@yeah.net"
[root@jenkins easy-springmvc-maven]# git config --global user.name "yanqi"
// 再次执行
[root@jenkins easy-springmvc-maven]# git commit -m "jenkins"
[master (root-commit) 9b9967e] jenkins
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 index.html
[root@jenkins easy-springmvc-maven]# git push origin master //提交到主分支(默认分支)
git@10.10.10.14's password:1qaz2wsx
Counting objects: 3, done.
Writing objects: 100% (3/3), 208 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@10.10.10.14:/home/git/easy-springmvc-maven
* [new branch] master -> master
// 测试成功!
#1.5、补充:配置免秘钥
#1.5.1、10.10.10.12 客户端配置公钥
[root@jenkins ~]# ssh-keygen
[root@jenkins ~]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqyWhdWhod3fz9YNygWhnQjXpZ4lko7SivNATIy1vVgyouEXkFeW2VujpxRU3VCvMXxO7C67iefahnLFm5UX4ZJTDzl9gXblzD3/GhJ0QL2BIjXidY0+eqtNYSx0bxvnYl9sCPXae9S0GyVmIfDyTh6gqWkusTvI3lIu4tfYfn4Y6W2ovBq+Cf/2oe1cFe6jtJnIscA2PeliOT90Gw3Y9wDRm/T1BE+V9Vr1kZ0kvTja+0zKd37sXL2oJwNnECK/kAgV7Paan3WdD9WQ4MhzWPMeuiPbf8MWBKssu8ZRnpQ5ZD4GcYQXqYLR5E3Kslpo9lsbXwpXBSOv4e/lg4Y6B7 root@jenkins


#1.5.2、10.10.10.14 git 服务器进行配置
[root@git ~]# su - git
[git@git ~]$ mkdir -p .ssh/
[git@git ~]$ chmod 700 .ssh/ // 给予目录700权限
[git@git ~]$ vim .ssh/authorized_keys // 写入10.10.10.12服务器的公钥
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqyWhdWhod3fz9YNygWhnQjXpZ4lko7SivNATIy1vVgyouEXkFeW2VujpxRU3VCvMXxO7C67iefahnLFm5UX4ZJTDzl9gXblzD3/GhJ0QL2BIjXidY0+eqtNYSx0bxvnYl9sCPXae9S0GyVmIfDyTh6gqWkusTvI3lIu4tfYfn4Y6W2ovBq+Cf/2oe1cFe6jtJnIscA2PeliOT90Gw3Y9wDRm/T1BE+V9Vr1kZ0kvTja+0zKd37sXL2oJwNnECK/kAgV7Paan3WdD9WQ4MhzWPMeuiPbf8MWBKssu8ZRnpQ5ZD4GcYQXqYLR5E3Kslpo9lsbXwpXBSOv4e/lg4Y6B7 root@jenkins
[git@git ~]$ chmod 600 .ssh/authorized_keys // 给予文件600权限
#免密拉取测试
[root@jenkins ~]# git clone git@10.10.10.14:/home/git/easy-springmvc-maven.git


#2、无法建立连接解决方案
// 更改jenkins用户为root用户;
// 更改jenkins用户为正常的普通用户/bin/bash,将其的公钥加入到git服务器的git用户中。
// 此处暂时先用第一种解决办法,更改 jenkins 的运行用户为 root 用户,通过如下方式进行更改:
// 将/etc/sysconfig/jenkins文件由
[root@jenkins ~]# vim /etc/sysconfig/jenkins
JENKINS_USER="jenkins"
// 改为
JENKINS_USER="root"
// 然后再重启即可。
[root@jenkins ~]# systemctl restart jenkins.service


#报错:无法连接仓库:Invalid remote URL: git clone git@10.10.10.13:/home/git/repos/app.git
// 解决方案:配置秘钥

——>maven报错解决<——

#maven报错
#Dashboard——>maven-docker项目
// Build
//Maven Version
Jenkins needs to know where your Maven is installed.
Please do so from the tool configuration.
#解决方案
#Dashboard——>全局工具配置——>Maven安装——>name:maven3.0.5——>MAVEN_HOME:/usr/share/maven


#查看maven的安装地址
[root@jenkins ~]# which mvn
/usr/bin/mvn

六、Jenkins构建Job(通过jenkins向docker主机中部署项目

1、构建Maven风格的Job:代码地址:git@10.10.10.14:/home/git/easy-springmvc-maven.git

Dashboard——>新建Item——>任务名称:maven-docker:构建一个maven项目——>

Goals and options填写:clean package -Dmaven.test.skip=true

只有前面执行成功之后才会执行下面部分。

2、配置Post Steps

注:脚本中用到的仓库和认证的账号需要先在harbor新建好。

——>配置dockerfile文件<——

#在 centos7.x 10.10.10.12 jenkins服务器中配置


[root@jenkins ~]# mkdir -pv /var/lib/jenkins/docker-file/maven-docker-test_war
[root@jenkins ~]# vim /var/lib/jenkins/docker-file/maven-docker-test_war/Dockerfile
# Version 1.0
# Base images.
FROM tomcat:8.0.36-alpine


# Author.
MAINTAINER yanqi <yanqi_vip@yeah.net>


# Add war.
ADD maven-docker.war /usr/local/tomcat/webapps/


# Define working directory.
WORKDIR /usr/local/tomcat/bin/


# Define environment variables.
ENV PATH /usr/local/tomcat/bin:$PATH


# Define default command.
CMD ["catalina.sh", "run"]


# Expose ports.
EXPOSE 8080




#解释说明
FROM tomcat:8.0.36-alpine // 从官方下载tomcat8.0.36
MAINTAINER yanqi <yanqi_vip@yeah.net>                       // 作者:作者邮箱
ADD maven-docker-test.war /usr/local/tomcat/webapps/ // 从jenkins本地文件系统拷贝它的war包到/usr/local/tomcat/webapps的目录下;项目名称是maven-docker
ENV PATH /usr/local/tomcat/bin:$PATH                        // 设置环境变量
CMD ["catalina.sh", "run"] // 最后去执行
EXPOSE 8080 // 端口
#目的:是把新产生的war包增加到tomcat中去

——>Post Steps.配置shell脚本<——

本次实验yum安装方式修改工作目录后的脚本:

# Jenkins机器:编译完成后,build生成一个新版本的镜像,push到远程docker仓库


# Variables
JENKINS_WAR_HOME='/var/lib/jenkins/workspace/maven-docker/target'
DOCKERFILE_HOME='/var/lib/jenkins/docker-file/maven-docker-test_war'
HARBOR_IP='10.10.10.11'
REPOSITORIES='jenkins/maven-docker'
HARBOR_USER='yanqi'
HARBOR_USER_PASSWD='Harbor12345'
HARBOR_USER_EMAIL='yanqi_vip@yeah.net'


# Copy the newest war to docker-file directory.
\cp -f ${JENKINS_WAR_HOME}/easy-springmvc-maven.war ${DOCKERFILE_HOME}/maven-docker.war


# Delete image early version.
sudo docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}:80
IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`
if [ -n "${IMAGE_ID}" ];then
sudo docker rmi ${IMAGE_ID}
fi


# Build image.
cd ${DOCKERFILE_HOME}
TAG=`date +%Y%m%d-%H%M%S`
sudo docker build -t ${HARBOR_IP}:80/${REPOSITORIES}:${TAG} . &>/dev/null


# Push to the harbor registry.
sudo docker push ${HARBOR_IP}:80/${REPOSITORIES}:${TAG} &>/dev/null




#配置说明:
JENKINS_WAR_HOME='/var/lib/jenkins/workspace/maven-docker/target' // 定义环境变量:设置工作目录
DOCKERFILE_HOME='/var/lib/jenkins/docker-file/maven-docker-test_war' // dockerfile文件创建,上面已经创建完成。
HARBOR_IP='10.10.10.11' // 定义harbor服务器的地址
REPOSITORIES='jenkins/maven-docker' // 库的名字
HARBOR_USER='yanqi'                                        // harbor仓库的用户名:yanqi
HARBOR_USER_PASSWD='Harbor12345' // Harbor仓库的密码:Harbor12345
sudo docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}:80 // jenkins主机登录harbor服务器所用到的${HARBOR_USER}:Harbor主机的用户 ${HARBOR_USER_PASSWD}主机的密码 ${HARBOR_IP}:80主机的地址+端口
Login Succeeded //登录成功
IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'` // IMAGE_ID,通过awk拿去第三列。作为唯一的标识
sudo docker build -t ${HARBOR_IP}:80/${REPOSITORIES}:${TAG} . &>/dev/null // .标识之前的那个目录
sudo docker push ${HARBOR_IP}:80/${REPOSITORIES}:${TAG} &>/dev/null //push的时候也需要端口号

之前war包方式部署的jenkins里面的脚本(war包部署时所使用的的脚本文件

# Jenkins机器:编译完成后,build生成一个新版本的镜像,push到远程docker仓库


# Variables
JENKINS_WAR_HOME='/root/.jenkins/workspace/maven-docker-test/target'
DOCKERFILE_HOME='/root/jenkins/docker-file/maven-docker-test_war'
HARBOR_IP='10.10.10.11'
REPOSITORIES='jenkins/maven-docker-test'
HARBOR_USER='yanqi'
HARBOR_USER_PASSWD='Harbor12345'
HARBOR_USER_EMAIL='yanqi_vip@yeah.net'


# Copy the newest war to docker-file directory.
\cp -f ${JENKINS_WAR_HOME}/easy-springmvc-maven.war ${DOCKERFILE_HOME}/maven-docker-test.war


# Delete image early version.
sudo docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}
IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`
if [ -n "${IMAGE_ID}" ];then
sudo docker rmi ${IMAGE_ID}
fi


# Build image.
cd ${DOCKERFILE_HOME}
TAG=`date +%Y%m%d-%H%M%S`
sudo docker build -t ${HARBOR_IP}/${REPOSITORIES}:${TAG} . &>/dev/null


# Push to the harbor registry.
sudo docker push ${HARBOR_IP}/${REPOSITORIES}:${TAG} &>/dev/null

注:yanqi包的名字为git项目的名字

/var/lib/jenkins/workspace/maven-docker/target/easy-springmvc-maven.war

拉取镜像、发布


远程站点:应用服务器,和部署规划保持一致:centos7.x 10.10.10.13 docker应用服务器

——>Execute shell script on remote host using ssh.远程站点配置文件<——

Harbor2.0的API发生了变化,此处是新版脚本方式,修改了镜像tag获取的方式

# 拉取镜像,发布
HARBOR_IP='10.10.10.11'
REPOSITORIES='jenkins/maven-docker'
HARBOR_USER='yanqi'
HARBOR_USER_PASSWD='Harbor12345'


# 登录harbor
docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}:80


# Stop container, and delete the container.
CONTAINER_ID=`docker ps | grep "maven-docker" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]; then
docker stop $CONTAINER_ID
docker rm $CONTAINER_ID
else #如果容器启动时失败了,就需要docker ps -a才能找到那个容器
CONTAINER_ID=`docker ps -a | grep "maven-docker" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]; then # 如果是第一次在这台机器上拉取运行容器,那么docker ps -a也是找不到这个容器的
docker rm $CONTAINER_ID
fi
fi


# Delet eeasy-springmvc-maven image early version.
IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`
if [ -n "${IMAGE_ID}" ];then
docker rmi ${IMAGE_ID}
fi


# Pull image.
# TAG=`curl -s http://${HARBOR_IP}/api/repositories/${REPOSITORIES}/tags | jq '.[-1]' | sed 's/\"//g'`
# TAG=`curl -s http://10.10.10.11/api/repositories/jenkins/maven-docker/tags | jq '.[-1]| {name:.name}' | awk -F '"' '/name/{print $4}'`
TAG=`curl -s http://10.10.10.11/api/v2.0/projects/jenkins/repositories/maven-docker/artifacts |awk -F'name":"' '{print $2}'|cut -d '"' -f1`
docker pull ${HARBOR_IP}:80/${REPOSITORIES}:${TAG} &>/dev/null


# Run.
docker run -d --name maven-docker -p 8080:8080 ${HARBOR_IP}:80/${REPOSITORIES}:${TAG}




#配置说明:
HARBOR_IP='10.10.10.11' // Harbor的IP地址
REPOSITORIES='jenkins/maven-docker'                       // 执行地址
HARBOR_USER='yanqi' // 用户名
HARBOR_USER_PASSWD='Harbor12345' // 密码
docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}:80 //登录地址
# Pull image. //拉取镜像的操作
# TAG=`curl -s http://${HARBOR_IP}/api/repositories/${REPOSITORIES}/tags | jq '.[-1]' | sed 's/\"//g'`
# TAG=`curl -s http://10.10.10.11/api/repositories/jenkins/maven-docker/tags | jq '.[-1]| {name:.name}' | awk -F '"' '/name/{print $4}'`
// Harbor仓库的地址;应用到了Harbor仓库的API地址
TAG=`curl -s http://10.10.10.11/api/v2.0/projects/jenkins/repositories/maven-docker/artifacts |awk -F'name":"' '{print $2}'|cut -d '"' -f1`
// 只要更换harbor服务器的IP地址即可,后缀目不需要更改

辅助:这是旧版本的脚本

# 拉取镜像,发布
HARBOR_IP='172.22.211.175'
REPOSITORIES='jenkins/maven-docker-test'
HARBOR_USER='wing'
HARBOR_USER_PASSWD='Harbor12345'


# 登录harbor
docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}


# Stop container, and delete the container.
CONTAINER_ID=`docker ps | grep "maven-docker-test" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]; then
docker stop $CONTAINER_ID
docker rm $CONTAINER_ID
else #如果容器启动时失败了,就需要docker ps -a才能找到那个容器
CONTAINER_ID=`docker ps -a | grep "maven-docker-test" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]; then # 如果是第一次在这台机器上拉取运行容器,那么docker ps -a也是找不到这个容器的
docker rm $CONTAINER_ID
fi
fi


# Deleteeasy-springmvc-maven image early version.
IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`
if [ -n "${IMAGE_ID}" ];then
docker rmi ${IMAGE_ID}
fi


# Pull image.
# TAG=`curl -s http://${HARBOR_IP}/api/repositories/${REPOSITORIES}/tags | jq '.[-1]' | sed 's/\"//g'`
TAG=`curl -s http://172.22.211.175/api/repositories/jenkins/maven-docker-test/tags | jq '.[-1]| {name:.name}' | awk -F '"' '/name/{print $4}'`
docker pull ${HARBOR_IP}/${REPOSITORIES}:${TAG} &>/dev/null


# Run.
docker run -d --name maven-docker-test -p 8080:8080 ${HARBOR_IP}/${REPOSITORIES}:${TAG}
kubectl set image

3、构建

4、控制台输出过程

控制台输出
Started by user yanqi
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/maven-docker
The recommended git tool is: NONE
No credentials specified
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url git@10.10.10.14:/home/git/easy-springmvc-maven.git # timeout=10
Fetching upstream changes from git@10.10.10.14:/home/git/easy-springmvc-maven.git
> git --version # timeout=10
> git --version # 'git version 1.8.3.1'
> git fetch --tags --progress git@10.10.10.14:/home/git/easy-springmvc-maven.git +refs/heads#/*:refs/remotes/origin/* # timeout=10
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
Checking out Revision f7c9320a8a2ddfd0dba47fcec7dbefdaca4aee23 (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f f7c9320a8a2ddfd0dba47fcec7dbefdaca4aee23 # timeout=10
Commit message: "jenkins" "修改standard/1.1.2的依赖"
> git rev-list --no-walk f7c9320a8a2ddfd0dba47fcec7dbefdaca4aee23 # timeout=10
Parsing POMs
Established TCP socket on 45353
[maven-docker] $ java -cp /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-agent-1.13.jar:/usr/share/maven/boot/plexus-classworlds.jar org.jvnet.hudson.maven3.agent.Maven3Main /usr/share/maven /var/cache/jenkins/war/WEB-INF/lib/remoting-4.6.jar /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-1.13.jar /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-commons-1.13.jar 45353
<===[JENKINS REMOTING CAPACITY]===>channel started
Executing Maven: -B -f /var/lib/jenkins/workspace/maven-docker/pom.xml clean package -Dmaven.test.skip=true
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for springmvc-maven:easy-springmvc-maven:war:0.0.1-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-war-plugin is missing. @ line 22, column 15
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] [1m----------------< [0;36mspringmvc-maven:easy-springmvc-maven[0;1m >----------------[m
[INFO] [1mBuilding springmvc-maven 0.0.1-SNAPSHOT[m
[INFO] [1m--------------------------------[ war ]---------------------------------[m
[INFO]
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ easy-springmvc-maven ---
[INFO] Deleting /var/lib/jenkins/workspace/maven-docker/target
[INFO]
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ easy-springmvc-maven ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /var/lib/jenkins/workspace/maven-docker/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ easy-springmvc-maven ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /var/lib/jenkins/workspace/maven-docker/target/classes
[INFO]
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ easy-springmvc-maven ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /var/lib/jenkins/workspace/maven-docker/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ easy-springmvc-maven ---
[INFO] Not compiling test sources
[INFO]
[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ easy-springmvc-maven ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- maven-war-plugin:2.1.1:war (default-war) @ easy-springmvc-maven ---
[INFO] Packaging webapp
[INFO] Assembling webapp [easy-springmvc-maven] in [/var/lib/jenkins/workspace/maven-docker/target/easy-springmvc-maven]
[INFO] Processing war project
[INFO] Copying webapp resources [/var/lib/jenkins/workspace/maven-docker/src/main/webapp]
[INFO] Webapp assembled in [95 msecs]
[INFO] Building war: /var/lib/jenkins/workspace/maven-docker/target/easy-springmvc-maven.war
[INFO] WEB-INF/web.xml already added, skipping
[INFO] [1m------------------------------------------------------------------------[m
[INFO] [1;32mBUILD SUCCESS[m
[INFO] [1m------------------------------------------------------------------------[m
[INFO] Total time: 5.373 s
[INFO] Finished at: 2021-04-01T22:04:26+08:00
[INFO] [1m------------------------------------------------------------------------[m
Waiting for Jenkins to finish collecting data
[JENKINS] Archiving /var/lib/jenkins/workspace/maven-docker/pom.xml to springmvc-maven/easy-springmvc-maven/0.0.1-SNAPSHOT/easy-springmvc-maven-0.0.1-SNAPSHOT.pom
[JENKINS] Archiving /var/lib/jenkins/workspace/maven-docker/target/easy-springmvc-maven.war to springmvc-maven/easy-springmvc-maven/0.0.1-SNAPSHOT/easy-springmvc-maven-0.0.1-SNAPSHOT.war
channel stopped
[maven-docker] $ /bin/sh -xe /tmp/jenkins7471956269803087309.sh
+ JENKINS_WAR_HOME=/var/lib/jenkins/workspace/maven-docker/target
+ DOCKERFILE_HOME=/var/lib/jenkins/docker-file/maven-docker-test_war
+ HARBOR_IP=10.10.10.11
+ REPOSITORIES=jenkins/maven-docker
+ HARBOR_USER=yanqi
+ HARBOR_USER_PASSWD=Harbor12345
+ HARBOR_USER_EMAIL=yanqi_vip@yeah.net
+ cp -f /var/lib/jenkins/workspace/maven-docker/target/easy-springmvc-maven.war /var/lib/jenkins/docker-file/maven-docker-test_war/maven-docker.war
+ sudo docker login -u yanqi -p Harbor12345 10.10.10.11:80
Login Succeeded
++ sudo docker images
++ awk '{print $3}'
++ grep jenkins/maven-docker
+ IMAGE_ID=3ca27a216b15
+ '[' -n 3ca27a216b15 ']'
+ sudo docker rmi 3ca27a216b15
Untagged: 10.10.10.11:80/jenkins/maven-docker:20210401-215916
Untagged: 10.10.10.11:80/jenkins/maven-docker@sha256:e14d7ce0dc4e8a778c02b9a23603c2b568e4149091764918824314918d10802e
Deleted: sha256:3ca27a216b15bcf6d8363e4053603ec9499e22e59b84f5252f33af6ab7493cd8
Deleted: sha256:ea0602601a9fdc8df2bcebf3f1b56b4b9e4c02df359fd105c5621a4a77aa8c8f
Deleted: sha256:a9417c1adbd62bb0be4163be4d99e140b5c642d76d32ee8829a4b0b1c6c24eb5
Deleted: sha256:418cf4676c0672513cdaaa1c6eccc6fe6f236745e311968ce5385f8a462cc2ee
Deleted: sha256:04deeb07c4d5a3c0867eb0a7bf214d256cf8a30010b12d08b07886749c84e2c9
Deleted: sha256:1e893409946bfc630c0775bdfc69f6702eadba03017bf59562b0b22a89738f81
Deleted: sha256:c8461cc64f1938ebb3f51105115fce4bde851397ed68ed42adfafc5014f206f4
+ cd /var/lib/jenkins/docker-file/maven-docker-test_war
++ date +%Y%m%d-%H%M%S
+ TAG=20210401-220427
+ sudo docker build -t 10.10.10.11:80/jenkins/maven-docker:20210401-220427 .
+ sudo docker push 10.10.10.11:80/jenkins/maven-docker:20210401-220427
[SSH] script:


# 拉取镜像,发布
HARBOR_IP='10.10.10.11'
REPOSITORIES='jenkins/maven-docker'
HARBOR_USER='yanqi'
HARBOR_USER_PASSWD='Harbor12345'


# 登录harbor
docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}:80


# Stop container, and delete the container.
CONTAINER_ID=`docker ps | grep "maven-docker" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]; then
docker stop $CONTAINER_ID
docker rm $CONTAINER_ID
else #如果容器启动时失败了,就需要docker ps -a才能找到那个容器
CONTAINER_ID=`docker ps -a | grep "maven-docker" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]; then # 如果是第一次在这台机器上拉取运行容器,那么docker ps -a也是找不到这个容器的
docker rm $CONTAINER_ID
fi
fi


# Delet eeasy-springmvc-maven image early version.
IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`
if [ -n "${IMAGE_ID}" ];then
docker rmi ${IMAGE_ID}
fi


# Pull image.
# TAG=`curl -s http://${HARBOR_IP}/api/repositories/${REPOSITORIES}/tags | jq '.[-1]' | sed 's/\"//g'`
# TAG=`curl -s http://10.10.10.11/api/repositories/jenkins/maven-docker/tags | jq '.[-1]| {name:.name}' | awk -F '"' '/name/{print $4}'`
TAG=`curl -s http://10.10.10.11/api/v2.0/projects/jenkins/repositories/maven-docker/artifacts |awk -F'name":"' '{print $2}'|cut -d '"' -f1`
docker pull ${HARBOR_IP}:80/${REPOSITORIES}:${TAG} &>/dev/null


# Run.
docker run -d --name maven-docker -p 8080:8080 ${HARBOR_IP}:80/${REPOSITORIES}:${TAG}


[SSH] executing...
Login Succeeded
d742fccf99af36073ce44dbdf6d3976343ef342d60c5f44ae9344777ac437344


[SSH] completed
[SSH] exit-status: 0


Finished: SUCCESS

5、验证是否部署成功:在docker应用服务器上查看

[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.10.10.11:80/jenkins/maven-docker 20210401-223405 952b37d8935a About a minute ago 153MB
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
56ffbf5b7ab2 10.10.10.11:80/jenkins/maven-docker:20210401-223405 "catalina.sh run" About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp maven-docker

六、Jenkins构建Job(通过jenkins向ks8集群中部署项目

——>Execute shell script on remote host using ssh.远程站点配置文件<——

Harbor2.0的API发生了变化,此处是新版脚本方式,修改了镜像tag获取的方式

# 拉取镜像,发布
HARBOR_IP='10.10.10.11'
REPOSITORIES='jenkins/maven-docker'
HARBOR_USER='yanqi'
HARBOR_USER_PASSWD='Harbor12345'


# 登录harbor
docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}:80


# Stop container, and delete the container.
CONTAINER_ID=`docker ps | grep "maven-docker" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]; then
docker stop $CONTAINER_ID
docker rm $CONTAINER_ID
else #如果容器启动时失败了,就需要docker ps -a才能找到那个容器
CONTAINER_ID=`docker ps -a | grep "maven-docker" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]; then # 如果是第一次在这台机器上拉取运行容器,那么docker ps -a也是找不到这个容器的
docker rm $CONTAINER_ID
fi
fi


# Delet eeasy-springmvc-maven image early version.
IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`
if [ -n "${IMAGE_ID}" ];then
docker rmi ${IMAGE_ID}
fi


# Pull image.
# TAG=`curl -s http://${HARBOR_IP}/api/repositories/${REPOSITORIES}/tags | jq '.[-1]' | sed 's/\"//g'`
# TAG=`curl -s http://10.10.10.11/api/repositories/jenkins/maven-docker/tags | jq '.[-1]| {name:.name}' | awk -F '"' '/name/{print $4}'`
TAG=`curl -s http://10.10.10.11/api/v2.0/projects/jenkins/repositories/maven-docker/artifacts |awk -F'name":"' '{print $2}'|cut -d '"' -f1`
docker pull ${HARBOR_IP}:80/${REPOSITORIES}:${TAG} &>/dev/null


# Run.
docker run -d --name maven-docker -p 8080:8080 ${HARBOR_IP}:80/${REPOSITORIES}:${TAG}
kubectl set image


#配置说明:
// kubectl set image+port的名字+镜像的名字即可:(只需要把k8s中的镜像替换掉即可)
#其它的部署流程不会发生变化。

七、报错处理:

#错误一:
// 错误现象:
+ cp -f /var/lib/jenkins/workspace/maven-docker/target/easy-springmvc-maven.war /var/lib/jenkins/docker-file/maven-docker-test_war/maven-docker.war
+ sudo docker login -u yanqi -p Harbor12345 10.10.10.11:80
++ grep jenkins/maven-docker
+ cd /var/lib/jenkins/docker-file/maven-docker-test_war
+ sudo docker build -t 10.10.10.11:80/jenkins/maven-docker:20210401-144031 .
Build step 'Execute shell' marked build as failure          #脚本文件未能执行,权限被拒绝,需要给新建的目录授予读写权限
// 解决方案:
[root@jenkins ~]# cd /var/lib/jenkins
[root@jenkins jenkins]# chmod 777 docker-file/ -R
[root@jenkins jenkins]# ll docker-file/
drwxrwxrwx 2 root root 48 Apr 1 21:11 maven-docker-test_war


#错误二:
// 错误现象:
+ sudo docker build -t 10.10.10.11:80/jenkins/maven-docker:20210401-205209 .
Build step 'Execute shell' marked build as failure
Finished: FAILURE
#解决方案:
// 查看dock而file文件是不是配置有问题:该环境排查是
[root@jenkins maven-docker-test_war]# cat Dockerfile
ADD maven-docker-test.war /usr/local/tomcat/webapps/
// 改为
ADD maven-docker.war /usr/local/tomcat/webapps/


#错误三:
// 错误现象:
Error response from daemon: Get https://10.10.10.11:80/v2/: http: server gave HTTP response to HTTPS client
parse error: Invalid numeric literal at line 1, column 10
docker: invalid reference format.
// 解决方案:#在docker应用服务器上修改对仓库的安全配置。
[root@docker ~]# vim /etc/docker/daemon.json
{ "insecure-registries":["10.10.10.11:80"] }
// 重启docker
[root@docker ~]# systemctl restart docker

END





声明:JavaBBS论坛主要用于IT技术专题的交流学习,为开源技术爱好者提供广泛、权威的技术资料。若您在技术专题有更好的想法或者建议,欢迎交流!!!



推荐阅读

Recommended reading

 







JavaBBS



Git











  






https://www.javabbs.cn/git






  JavaBBS大数据






→ 






https://www.javabbs.cn





/dsj





  JavaBBS云存储






→  https://www.javabbs.cn






/ycc







  JavaBBS数据库













  https://www.javabbs.cn






/sjk







  JavaBBS云计算













  https://www.javabbs.cn






/yjs







  JavaBBSIT.Log













https://www.javabbs.cn






/itl






  JavaBBSNginx













  https://www.javabbs.cn






/ngx






  JavaBBSzabbix













https://www.javabbs.cn






/zbx






  JavaBBSJavaSE













https://www.javabbs.cn






/jse







  JavaBBS社区文章













https://www.javabbs.cn






/bwz






  JavaBBS社区资料













https://www.javabbs.cn






/bzl






文章转载自Java BBS,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论