Docker搭建Jenkins发布到远端服务器上,Docker+Jenkins+私库+DockerFile

下载镜像

docker pull jenkins/jenkins:2.346.1-lts

创建复制用临时容器

创建

docker run -d -p 8080:8080 -p 50000:50000  --name jenkin jenkins/jenkins:2.346.1-lts

复制文件到本地

mkdir -p /usr/docker/jenkins

docker cp jenkin:/var/jenkins_home /usr/docker/jenkins

修改文件夹权限

需要修改下目录权限,因为当映射本地数据卷时,/data/jenkins_home/目录的拥有者为root用户,

而容器中jenkins用户的 uid 为 1000。

我们创建一个jenkins目录


chown -R 1000:1000 /usr/docker/jenkins

docker rm -f jenkin

修改镜像源

cd /usr/docker/jenkis/jenkins_home

vim hudson.model.UpdateCenter.xml

#将url内容修改为清华大学官方镜像
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

启动容器

docker run -u root -d -p 8083:8083 -p 50000:50000 \
-v /usr/docker/jenkins/jenkins_home:/var/jenkins_home \
-v $(which docker):/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/jdk/jdk1.8.0_333:/usr/local/java \
-v /usr/mvn/apache-maven-3.9.0:/usr/local/maven \
--name jenkins jenkins/jenkins:2.396

原文链接:Docker 搭建 Jenkins 容器 (完整详细版)_Touch&-DevPress官方社区 (csdn.net)

$(which docker) 语句表示,如果“which docker”在容器上运行,Docker 也会在本地计算机上运行“which container”,并将执行结果返回给容器

插件管理

在实现持续集成之前, 需要确保以下插件安装成功。

  • Maven Integration : Maven 集成管理插件。
  • Docker : Docker集成插件。
  • GitLab : GitLab集成插件。
  • Publish Over SSH:远程文件发布插件。
  • SSH: 远程脚本执行插件。
  • Git server:可以直接插件安装git,避免本地挂载的宝贝

全局配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jEHaF0QO-1679469739488)(assets/image-20230315202507-pvxcew0.png)]

新建任务

基础依赖信息安装到服务器上的本地仓库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y5DgQgWZ-1679469739489)(assets/image-20230315205014-7giyb4o.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UKEyfSGG-1679469739490)(assets/image-20230315205054-e1x2qsd.png)]

clean install -Dmaven.test.skip=true -f pom.xml

含义

  • clean install maven命令清除,打包

  • -Dmaven.test.skip=true 跳过测试

  • dockerfile:build 启动dockerfile插件构建容器

  • -f heima-leadnews-user/pom.xml 指定需要构建的文件(必须是pom)

  • 立即构建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-amfXMy0J-1679469766075)(assets/image-20230316095615-h49uqr1.png)]

此处构建仅为全部包的clean和install

微服务打包配置

内容如上基础依赖

新增shell脚本内容

构建执行Execute shell

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vi9hiADz-1679469766076)(assets/image-20210802005318464-20230313102911-zraqkqo.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eBENQXxD-1679469766076)(assets/image-20210802005329034-20230313102911-wzrdfho.png)]

if [ -n  "$(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )" ]
 then
 #删除之前的容器
 docker rm -f $(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )
fi
 # 清理镜像
docker image prune -f 
 # 启动docker服务
docker run -d --net=host -e PARAMS="--spring.profiles.active=prod"  --name $JOB_NAME docker_storage/$JOB_NAME

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nt2FHPx1-1679469766076)(assets/image-20210802010720937-20230313102911-ozgm69s.png)]

maven命令

clean install -Dmaven.test.skip=true dockerfile:build -f heima-leadnews/heima-leadnews-service/heima-leadnews-article/pom.xml

shell脚本

image_tag=$docker_registry/docker_storage/$JOB_NAME
echo '================docker镜像清理================'
if [ -n  "$(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )" ]
 then
 #删除之前的容器
 docker rm -f $(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )
fi
 # 清理镜像
docker image prune -f 

# 创建TAG
docker tag docker_storage/$JOB_NAME $image_tag
echo '================docker镜像推送================'
# 推送镜像
docker push $image_tag
# 删除TAG
docker rmi $image_tag
echo '================docker tag 清理 ================'

推送到远程服务器

构建docker私有仓库

拉取仓库镜像

docker pull  registry:latest

直接运行

docker run -d -p 5000:5000 --name registry -v /usr/docker/registry:/var/lib/registry registry:latest
配置Docker客户端

正常生产环境中使用, 要配置HTTPS服务, 确保安全,内部开发或测试集成的局域网环境,可以采用简便的方式, 不做安全控制。

先确保持续集成环境的机器已安装好Docker客户端, 然后做以下修改:

vi /lib/systemd/system/docker.service

修改内容:

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.200.100:5000

指向安装Registry的服务IP与端口。

重启生效:

systemctl daemon-reload
systemctl restart docker.service

查看仓库资源

访问地址:http://120.0.0.1:5000/v2/_catalog

  1. 配置Docker客户端

    正常生产环境中使用, 要配置HTTPS服务, 确保安全,内部开发或测试集成的局域网环境,可以采用简便的方式, 不做安全控制。

    先确保持续集成环境的机器已安装好Docker客户端, 然后做以下修改:

    vi /lib/systemd/system/docker.service
    

    修改内容:

    ExecStart=/usr/bin/dockerd --insecure-registry 192.168.200.100:5000
    

    指向安装Registry的服务IP与端口。

    重启生效:

    systemctl daemon-reload
    systemctl restart docker.service
    
jenkins系统配置远程服务器链接

位置:Manage Jenkins–>Configure System

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iulUnhKR-1679469766078)(assets/image-20210802005937966-20230313102911-pt7kzfi.png)]

需要添加凭证

位置:Manage Jenkins–>Manage CreDentials

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YfiBJQUz-1679469766078)(assets/image-20210802010324224-20230313102911-za9bor1.png)]

添加链接到130服务器的用户名和密码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oLrmFfCG-1679469766078)(assets/image-20210802010525665-20230313102911-93g6is6.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1iW9HgQH-1679469766078)(assets/image-20210802010429136-20230313102911-24sxmd5.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WHNEpBCG-1679469766079)(assets/image-20210802010201146-20230313102911-1hf3oqh.png)]

jenkins项目创建与其他微服务相同

创建项目参考之前创建过的用户微服务

设置参数
构建执行Execute shell

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e00fok9q-1679469766079)(assets/image-20210802010720937-20230313102911-ozgm69s.png)]
在这里插入图片描述

maven命令

clean install -Dmaven.test.skip=true dockerfile:build -f heima-leadnews/heima-leadnews-service/heima-leadnews-article/pom.xml

shell脚本

image_tag=$docker_registry/docker_storage/$JOB_NAME
echo '================docker镜像清理================'
if [ -n  "$(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )" ]
 then
 #删除之前的容器
 docker rm -f $(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )
fi
 # 清理镜像
docker image prune -f 

# 创建TAG
docker tag docker_storage/$JOB_NAME $image_tag
echo '================docker镜像推送================'
# 推送镜像
docker push $image_tag
# 删除TAG
docker rmi $image_tag
echo '================docker tag 清理 ================'
在远程服务器上执行脚本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QLtHNDex-1679469766079)(assets/image-20210802010750809-20230313102911-mlir59z.png)]

远程服务器执行的shell脚本

echo '================拉取最新镜像================'
docker pull $docker_registry/docker_storage/$JOB_NAME

echo '================删除清理容器镜像================'
if [ -n  "$(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )" ]
 then
 #删除之前的容器
 docker rm -f $(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )
fi
 # 清理镜像
docker image prune -f 

echo '===============启动容器================'
docker run -d   --net=host -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME $docker_registry/docker_storage/$JOB_NAME

中间遇见的问题

注1:源码管理-Git配置,凭证Credentials插件缺失问题,导致的凭证为空,弹窗ERROR

注2:"Jenkins Build报错:[ERROR] Some problems were encountered while processing the POMs

注3:IDEA sun.misc.BASE64Encoder报错找不到

注4:[ERROR] No plugin found for prefix 'docker' in the current project and in the plugin groups

此文章是从我笔记本中粘贴过来的,尽管修了修但可能还有些不整洁的,不过不影响观看。哥们已经把能踩的坑都给你们踩完了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值