Centos7 + gitee + jenkins + docker

大致分为六个步骤

       1. idea新建mvn项目,编写测试接口
  2. 安装gitee插件
  3. jenkins配置gitee
  4. jenkins新建mvn项目并配置
  5. 测试触发构建功能
  6. 编写Dockerfile,shell脚本,构建镜像,创建运行容器

1、安装Tomcat、jenkins、mvn

参考https://www.jianshu.com/p/686e534a6fec

2、docker安装

参考https://www.jianshu.com/p/9bd3ed0b336b

注意:安装docker修改其加速镜像为阿里云的

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

一、idea新建mvn项目,编写测试接口

在idea中新建mvn项目,提交到gitee上,此步骤省略。

二、给jenkins安装gitee插件

安装完成插件之后重启jenkins服务 

三、jenkins配置gitee

1、链接名:可按自己想法填写 

2、Gitee 域名 URL: https://gitee.com,或者按gitee官方提示 (码云私有化客户输入部署的域名)

3、证书令牌:

    3.1 点击新建

    3.2、访问蓝色背景处的链接,在gitee上获取私人令牌

    3.3、点击提交,系统会生成一串字符,复制过来填进去就OK了,ID和描述可按自己需求填写,没有什么限制条件

4、点击测试链接,完美的配置成功

 5、保存返回

四、jenkins新建mvn项目并配置

 1.源码配置

2、准备构建

3、构建设置以及shell

 

echo '脚本启动了'

if [ $(docker ps -a -q) != "" ]; then
   echo "停止所有运行中的容器"
   docker stop $(docker ps -a -q)
   echo "删除所有容器"
   docker rm $(docker ps -a -q)
fi
echo "启动helloworld"
/var/docker/docker_run.sh helloword "-p 8888:8888" "-m 0.5g"

 docker_run.sh在服务的/var/docker下,内容为:

#!/bin/bash
#defined
export JAVA_HOME=/usr/local/java/jdk1.8.0_11

IMAGE="$1"
PORT="$2"
OPTIONS=""
JVM=""
#param validate
if [ $# -lt 2 ]; then
  echo "you must use like this : ./deploy_run.sh <image> <port> [options]"
  exit
fi
if [ "$3" != "" ]; then
   OPTIONS="$3"
fi
if [ "$4" != "" ]; then
   JVM="$4"
fi 

#拿到容器ID后kill掉并删除。
delete_container(){
    echo "the container id is $1"
    if [ -n "$1" ]; then
        echo "delete container:" $1
        docker stop $1
        docker rm -f $1
    fi
}

echo ">>> Get old image $IMAGE container id"
CID=$(docker ps | grep "${IMAGE}" | awk '{print $1}')
#因为jenkins每次的build的时候,如果镜像的tag没有指定,那么新的镜像build成功后,之前的镜像名称就会变成none。
#所以我们找出为名字为none的就是之前的镜像。
if [ ! -n "$CID" ]; then
        echo "get old image id"
        OLD_IMAGE_IDS=$(docker images --no-trunc| grep none | awk '{print $3}')
        echo $OLD_IMAGE_IDS
        if [ -n "$OLD_IMAGE_IDS" ]; then
          if [ -n ${OLD_IMAGE_IDS[1]} ]; then
                for OLD_IMAGE_ID in $OLD_IMAGE_IDS
                do
                    CID=$(docker ps | grep "${OLD_IMAGE_ID:0:12}" | awk '{print $1}')
                    echo "CID:" $CID
                    delete_container $CID
                done
          else
          	 echo "OLD_IMAGE_IDS:" $OLD_IMAGE_IDS
                delete_container $OLD_IMAGE_IDS
          fi
        fi
else
        delete_container $CID
fi
#启动容器
echo "docker run -d $JVM -v /mnt:/mnt ${PORT} $IMAGE $OPTIONS"
docker run -d $JVM -v  /mnt:/mnt ${PORT} $IMAGE $OPTIONS   

echo "clean docker images"
#再次清理名称为none的docker镜像。
docker images --no-trunc| grep none | awk '{print $3}' | xargs -r docker rmi -f
#清理所有已经退出的容器
#docker rm `docker ps -a | grep Exited | awk '{print $1}'`
echo "finished"

 五、测试触发构建功能

 

 控制台输出

 六、访问测试结果

 

 

备注:

项目结构中包含dockerfile

其内容为:

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD helloworld.jar app.jar
EXPOSE 8888
ENTRYPOINT ["java","-D java.security.egd=file:/dev./urandom","-jar","/app.jar"]

 pom文件中要包含docker打包工具:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>helloword</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>helloword</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>helloworld</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <!-- docket 容器打包插件 -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <executions>
                    <!--绑定build命令到mvn package中-->
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                    <!--绑定push命令到mvn deploy中-->
                    <execution>
                        <id>push-image</id>
                        <phase>deploy</phase>
                        <goals>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <imageName>${project.artifactId}</imageName>
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值