持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情 1 安装Jenkins 检查jdk是否安装好
java -version
显示如下
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
这个是系统自带的open jdk 先删除
查看需要删除的jdk文件
rpm -qa | grep java
执行删除命令
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.262.b10-0.el7_8.x86_64
rpm -e --nodeps java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64
rpm -e --nodeps javapackages-tools-3.4.1-11.el7.noarch
rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64
删除完成后,下载新版本jdk www.oracle.com/technetwork… 下载对应版本的jdk 例如: jdk1.8.0_291 将下载的jdk 在/usr/local/java 路径下解压 tar -zxvf ./jdk-8u291-linux-x64.tar.gz
编辑 vim /etc/profile 末尾输入
unset i
unset -f pathmunge
export JAVA_HOME=/usr/local/java/jdk1.8.0_291
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
执行 source /etc/profile刷新一下 再次验证是否安装成功 java -version jdk已经安装成功 检查docker是否安装好 docker -v 发现docker版本太低了 卸载掉旧版本
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
sudo yum update 安装一些必要的系统工具: sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源: 1阿里云 sudo yum-config-manager --add-repo mirrors.aliyun.com/docker-ce/l… 2中科大 sudo yum-config-manager --add-repo mirrors.ustc.edu.cn/docker-ce/l…
yum list docker-ce --showduplicates|sort -r # 查询docker版本 yum install docker-ce-18.09.8 -y # 安装指定版本 我的命令:yum install docker-ce.x86_64 3:20.10.6-3.el7
安装完成 查看版本 docker -v
Docker version 20.10.6, build 370c289
拉取jenkins的docker镜像
docker pull jenkins/jenkins:lts
太慢了 果断换docker镜像源
vim /etc/docker/daemon.json
添加如下 {"registry-mirrors": [" docker.mirrors.ustc.edu.cn"]} 保存退出 重新拉 起飞 拉取完毕
systemctl start docker 启动docker 准备启动Jenkins
docker run --name my_jenkinsd
-u root
-v /etc/localtime:/etc/localtime
-v /home/llp/jenkins_home:/var/jenkins_home
-e JAVA_OPTS=-Duser.timezone=Asia/Shanghai
-v /usr/local/java/jdk1.8.0_291/bin/java:/usr/local/jdk
--name my_jenkinsd
-p 9090:8080
-d de181f8c70e8
PS :如果出现错误 docker invalid reference format. 检查命令中 是否有多余的空格 或者字符格式不正确
ps 1.查看jdk位置
which java
查看Jenkins目录是否挂载到centos中,有内容表示挂载成功
cd /home/llp/jenkins_home/
根据暴露的端口登录系统
在jenkins_home/secrets/initialAdminPassword 文件中记录着初始密码(对应我们创建容器的时候挂载的路径下的jenkins_home)
安装推荐的插件
等待系统自动进行安装
保存继续,
外部配置
配置JDK
配置地址
添加凭据
构建项目 手动拉取代码
接下来就是配置自动提交 参考网址
gitee.com/help/articl…
www.cnblogs.com/Christine-t…
(llp 123456)
421d3aac97492061fd227ef28d553569
如果插件下载慢或者没有对应的插件,点击高级->升级站点
updates.jenkins.io/update-cent…
mirrors.tuna.tsinghua.edu.cn/jenkins/upd…
mirror.xmission.com/jenkins/upd…
构建harbor私服
下载harbor 文件
github.com/goharbor/ha…
解压harbor文件
tar xf harbor-offline-installer-v2.1.0.tgz
进入harbor文件夹 复制一个harbor.yml文件
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
修改hostname 为本机地址,注释掉HTTPS相关内容 执行安装脚本安装
./install.sh
输入配置的ip 进行访问,然后新建一个公开的项目,名称是llp(后面会用到新建的项目名称)
配置docker私服,编辑daemon.json
vim etc/docker/daemon.json
如何目录下没有daemon.json,只有daemon.json.rpmsave 复制创建一个daemon.json 添加私服地址(高版本docker中默认是daemon.json.rpmsave ) "insecure-registries":["192.168.0.112:8080"] 重新加载daemon.json,然后重新启动docker,重启compose ,后2个命令需要在harbor目录下执行
systemctl daemon-reload
systemctl restart docker
docker-compose down -v
docker-compose up -d
拉取一个hello-word镜像
docker pull hello-world:linux
重新对该镜像打一个标签,端口号必须要,端口号后紧跟刚刚创建的项目名称
docker tag hello-world:linux 192.168.0.112:8080/llp/h1:linux
推送镜像到项目中 docker push 192.168.0.112:8080/llp/h1:linux 如果提示没有权限,则开始登录
docker login 192.168.0.112:808
输入账号 密码进行登录
在代码实践中,遇到了很多坑,耽误了很久 ,记录一下
坑1:配置私服后启动失败
vim /usr/lib/systemd/system/docker.service
vim /etc/docker/daemon.json
这2个文件中只能配置其中一个文件中的insecure-registry地址,如果同时配置 docker会启动失败,通过journalctl -xe 可以查看失败信息
坑2 报错connect: connection refused
Get https://192.168.0.112/v2/: dial tcp 192.168.0.112:443: connect: connection refused
Get https://192.168.0.112:80/v2/: http: server gave HTTP response to HTTPS client
原因:没有指定镜像要上传的地址,站点,端口缺失可能报这个错
坑3 推送报错tag不存在
推送时 docker push 192.168.0.112:8080/llp/h1
报错 tag does not exist: 192.168.0.112:8080/llp/h1:latest
但是通过docker images 是可以找到该镜像的
在核对一下错误信息,发现版本是latest不存在 我们的版本是linux 所以推送时加上版本号
docker push 192.168.0.112:8080/llp/h1:linux
使用Jenkins连接docker打包服务器,打包镜像
登录Jenkins 安装docker插件
docker或者docker plugin均可
进入系统配置 ->云 ,进入云配置页面
配置新的docker 云
进入docker镜像服务器111 配置docker允许2376端口访问
vim /usr/lib/systemd/system/docker.service
在ExecStart=/usr/bin/dockerd -H 后添加
效果如图
将 docker 私服112的地址添加到daemon.json 的私有地址中 重启docker 查看端口是否启动
netstat -anp | grep 2376
在Jenkins中 将 tcp://192.168.0.111:2376 添加到Docker Host URI
进入Jenkins中的项目中,点击配置
在项目工程中添加dockerfile文件,准备提交代码
报错1 步骤 8/17:运行 dotnet restore "./JNTest.csproj" ---> 在 ff1a02e536ba 中运行 确定恢复项目... /usr/share/dotnet/sdk/3.1.410/NuGet.targets(128,5): 错误:无法加载源api.nuget.org/v3/index.js…] /usr/share/dotnet/sdk/3.1.410/NuGet.targets(128,5): 错误:资源暂时不可用 [/src/JNTest.csproj]
----------解决方案 配置docker dns,原因目标服务器的docker不能访问外网
报错2
error CS0579: Duplicate 'global::System.Runtime.Versioning.TargetFrameworkAttribute
----------解决方案 情况工程文件夹,obj内容由于前面排查错误干上去了
错误3
message":"invalid reference format: repository name must be lowercase"
目标名称改为小写
错误4
Build step 'Execute shell' marked build as failure
删除错误的构建shell脚本
错误5 Could not push image: Get https://192.168.0.112:8080/v2/: http: server gave HTTP response to HTTPS client
镜像服务器配置私服的"insecure-registries" 192.168.0.112:8080
----------解决方案
错误6 无法推送图像:未经授权:未经授权访问存储库:llp/nettest,操作:推送:未经授权访问存储库:llp/nettest,操作:推送
----------解决方案 配置harbor身份验证 配置登录密码
[NET Test] $ /bin/sh -xe /tmp/jenkins7219611313016484862.sh
Finished: SUCCESS
进入Jenkins
安装 Publish Over SSH 插件
配置Publish Over SSH
点击新增添加服务器地址、用户名,点击高级 配置密码,测试链接成功
配置构建后操作
配置exec command
echo ‘========start============’
CONTAINER_NAME=nettest
docker pull 192.168.0.112/llp/$CONTAINER_NAME:v3
echo ‘========容器start============’
cid=$(docker ps -a|grep "$CONTAINER_NAME"|awk '{print $1}')
if [ "$cid"!="" ];then
docker rmi -f $cid
sleep 4s
fi
docker run -d --name $CONTAINER_NAME -p 8088:80 192.168.0.112/llp/$CONTAINER_NAME:v3
echo ‘========容器end=============’
docker run -d --name nettest -p 8088:80 192.168.0.112:8080/llp/nettest:v3
提交代码 访问成功 完成收工 进入发布服务器 构建成功 docker exec -it 42d606129885 /bin/bash 进入到指定容器的命令行中