前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[玩转腾讯云]Docker——使用Git来实现Jenkins发布、测试项目

[玩转腾讯云]Docker——使用Git来实现Jenkins发布、测试项目

原创
作者头像
eyqx
修改2021-04-19 18:07:25
6560
修改2021-04-19 18:07:25
举报
文章被收录于专栏:Jenkins运维Jenkins运维

一、安装Docker

PS:安装前提是已经安装了CentOS VM

1、设置下载Docker的镜像源

代码语言:javascript
复制
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2、安装Docke

代码语言:javascript
复制
yum -y install docker-ce

3.启动Docker服务

代码语言:javascript
复制
 systemctl start docke

4、配置镜像加速

4.1、修改docker服务配置:`vim /usr/lib/systemd/system/docker.service`进入,找到参数:`ExecStart=/usr/bin/dockerd`

4.2、在该行参数后面追加:`--registry-mirror=https://xfaawkne.mirror.aliyuncs.com`

4.3、最终该行参数为:

代码语言:javascript
复制
ExecStart=/usr/bin/dockerd --registry-mirror=https://xfaawkne.mirror.aliyuncs.com  -H fd:// --containerd=/run/containerd/containerd.sock

4.4、重启docke

代码语言:javascript
复制
systemctl daemon-reload
systemctl restart docke

二、创建自定义网络地

代码语言:javascript
复制
//创建cbnet网络
docker network create --subnet=172.18.0.0/16 cbnet
//删除docker网络命令
docker network rm 网络IP名称
//查看docker 的网络定义
docker network ls

三、docker创建容器

1、创建mysql、redis、nginx容器

代码语言:javascript
复制
MySQL:
docker run -d --name mysql --network cbnet --ip 172.18.0.100 -p 3309:3306  -e MYSQL_ROOT_PASSWORD=123456 mysql
Redis:
docker run -itd --name redis -p 6379:6379 --network cbnet --ip 172.18.0.102 redis
Nginx:
docker run --name nginx -p 80:80 --network cbnet --ip 172.18.0.105 nginx //如果没有,会自动下载

四、自定义镜像

查看全部本地的镜像`docker images`

删除本地镜像 `docker rmi` 镜像的标识

1、在虚拟机上修改docker.service配置,开放2375端口

代码语言:javascript
复制

2、在项目中的pom.xml文件下的plugins下面追加docker-maven插件

代码语言:javascript
复制
<groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <dockerHost>http://192.168.161.129:2375</dockerHost>
                    <imageName>creatorblue/spring-security</imageName>
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <forceTags>false</forceTags>
                    <dockerDirectory>${project.basedir}/src/main/resources</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

3、在资源目录新建Dockerfile文件,填写以下内容

代码语言:javascript
复制
FROM frolvlad/alpine-oraclejdk8:slim
USER root
VOLUME /tmp
ADD springboot-security-0.0.1-SNAPSHOT.jar app.ja
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS="-server -Xms256M -Xmx512M -XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=128M -Dfile.encoding=UTF-8 -Duser.timezone=GMT+08"
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

4、打包项目,右击项目选择Run As下的 Maven build 输入以下代码,点击run

代码语言:javascript
复制
docker:build -P prod或cleanpackge docker:build -P prod

控制台出现如下图及成功

5、在虚拟机查看自定义镜像是否成功:`docker images`

6、配置2个自定义容器IP地址

代码语言:javascript
复制
docker run -d --name spring-security -p 8088:8080 -v /mnt/uploads : /mnt/uploads --network cbnet --ip 172.18.0.110 spring-security1
docker run -d --name spring-security2 -p 8089:8080 -v /mnt/uploads : /mnt/uploads --network cbnet --ip 172.18.0.111 spring-security2

测试MySQL连接是否成功,如果连接失败,那就查看容器的日志:`docker logs spring-security1`并解决问题

上面那种方式查看日志会堆积所有的记录,推荐如下这种方式,会展示最新的日志

最后重启Spring-security1 和spring-security2容器,如果拒绝访问先ping本地IP地址是否能连接,不能连接关闭防火墙:systemctl stop firewalld

五、配置nginx反向代理,实现负载均衡(一个IP登录后,第二个IP可以直接进入,不会互挤)

1、查看nginx目录

代码语言:javascript
复制
1、复制容器的文件:docker cp nginx:/etc/nginx/conf.d/default.conf default.conf 
2、编辑文件:vi default.conf

2、在default.conf文件增加代码

修改default.conf文件如下:

代码语言:javascript
复制
//同一个镜像下的2个容器
upstream my{
   server 172.18.0.110:8080;
   server 172.18.0.111:8080;
}

location /spring{
   proxy_pass http://my;
}

六、项目上传到Git仓库

1、首先创建一个仓库

2、创建成功后,复制仓库地址

3、选择需要上传的项目并右击项目,选择Team下的Share Project

最后点击finish完成!如图:

`>` 代表动过它但是没有提交

`?` 代表全新创建的

`红色双箭头` 代表远程也修改,本地也修改了,就报错

4、提交到本地仓库

右击项目,选择Team下的Commit

5、提交到远程仓库,右击项目,如以下图示例

如果从本文的第一步就复制了,就不需要复制了,eclipse已经同步了;如果一开始没复制,就需要复制git的仓库地址即可!

此时,刷新git网址,如下图就成功了

如果遇到拉取不了,上传也上不了问题,详见`https://blog.csdn.net/ZHANGDANDAN04/article/details/115725977`文章篇尾有解决步骤

七、使用Jenkins发布、测试项目

进入官网Jenkins:`https://www.jenkins.io/`

1、安装Jenkins

2、按照以下界面步骤依次在虚拟机安装

代码语言:javascript
复制
1、sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

2、sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

3、yum install jenkins

3、安装成功后,启动jenkins

访问地址虚拟机ip地址+Jenkins默认端口8080

选择安装推荐的插件即可!

由于网络问题,所以有些插件安装失败,git已安装成功即可,可以点击继续进行下一步

4、在虚拟机上安装Git

代码语言:javascript
复制
yum install -y git

5、在Jenkins中新建一个Item,来构建项目,步骤如下:

点击构建成功的项目进行配置,点击确定

6、点击Manage Jenkins

并配置全局工具进行配置

7、虚拟机中下载jdk,并配置jdk

代码语言:javascript
复制
命令:
yum install -y javacc-maven-plugin.noarch
//搜索javac
find / -name javac

8、配置maven

8.1、首先进入maven官网,复制maven的压缩包

8.2、回到home目录,使用`wget+粘贴刚刚复制的maven地址`

8.3、解压文件

8.4、文件解压后,进入maven并进入cd conf中,修改settings.xml文件,里面加载阿里云服务器进行提速

代码语言:javascript
复制
1、进入编辑命令:vi settings.xm
2、在mirrors中新增阿里云服务器
<mirror>
      <!--This sends everything else to /public -->
      <id>aliyun</id>
      <mirrorOf>*</mirrorOf> 
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
  <mirror>
    <!--This is used to direct the public snapshots repo in the 
        profile below over to a different nexus group -->
    <id>aliyun-public-snapshots</id>
    <mirrorOf>*</mirrorOf> 
    <url>http://maven.aliyun.com/nexus/content/repositories/snapshots/</url>
  </mirror>

8.5、进行配置

9、调用顶层Maven目标

进入到构建项目的设置中

并构建maven项目,打包命令`clean install -P prod`,点击保存即可

10、在虚拟机上找到spring-security路径

11、完成构建项目

以下界面及启动成功!

jenkins 运行常遇到的错误:

1、在虚拟机下载jdk`yum install -y javacc-maven-plugin.noarch`

2、Jenkins访问权限不够

代码语言:javascript
复制
解决权限的命令
vim /etc/sysconfig/jenkins

3、Execute Shell写错项目名称

13、测试url访问地址

最后,当需要给项目升级时,首先完成代码编写,其次commit and push上传到git仓库,再在jenkins重新构建,再次访问新的接口即可,如以下示例步骤

**补充:可以写有个脚本同时启动多个容器**

1、编写启动多个容器的脚本:vi auto.sh

2、例如:启动三个容器

代码语言:javascript
复制
 !/bin/bash
docker run -d --name spring-security -p 8087:8080 -v /mnt/uploads:/mnt/uploads --network cbnet --ip 172.18.0.10 cetorblue/spring-security
docker’ run -d --name spring-security -p 8088:8080 -v/mnt/uploads : /mnt/uploads --network chnet --ip 172.18.0.10 creatorblue/spring-security
docker run_-d --name spring-security -p 8089:8080 -v /mnt/uploads : /mnt /uploads --network chnet --ip17.18.0.10 cretorblue/spring-security

最后启动 `sh auto.sh`即可!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档