Jenkins 整合 Docker 自动化部署

Docker 安装 Jenkins 配置自动化部署

1. Docker 安装 Jenkins

1.1 拉取镜像文件
docker pull jenkins/jenkins
1.2 创建挂载文件目录
mkdir -p $HOME/jenkins_home
1.3 启动容器
docker run -d -p 8080:8080 -v $HOME/jenkins_home:/var/jenkins_home --name jenkins jenkins/jenkins
1.4 进入容器查看初始密码
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
1.5 登录控制台完成初始化

选择安装推荐的插件

Jenkins 整合 Docker 自动化部署_第1张图片

2. 配置自动化部署

2.1 配置项目文件

2.1.1 创建DockerFile文件

文件位置与Java文件目录位置平级:

${WORKSPACE}/src/main/java

${WORKSPACE}/src/main/docker/DockerFile
Jenkins 整合 Docker 自动化部署_第2张图片

# 该镜像需要依赖的基础镜像
FROM openjdk:8
ARG JAR_FILE
# 复制打包完成后的jar文件到/opt目录下
COPY ${JAR_FILE} /project-name.jar
# 运行过程中创建一个project-name.jar文件
RUN bash -c 'touch /project-name.jar'
# 声明服务运行在端口
EXPOSE 8801
ENV JAVA_OPTS="-Xms512m -Xmx2048m"
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /project-name.jar" ]
# 指定维护者的名字
MAINTAINER name
2.1.2 添加pom文件插件
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-maven-pluginartifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackagegoal>
                    goals>
                execution>
            executions>
            <configuration>
                <includeSystemScope>trueincludeSystemScope>
            configuration>
        plugin>
        <plugin>
            <groupId>com.spotifygroupId>
            <artifactId>docker-maven-pluginartifactId>
            <version>1.0.0version>
            <executions>
                <execution>
                    <id>build-imageid>
                    <phase>packagephase>
                    <goals>
                        <goal>buildgoal>
                    goals>
                execution>
            executions>
            <configuration>
                
                <imageName>project-category/${project.artifactId}:${project.version}imageName>
                <dockerHost>http://${dockerHost}:2375dockerHost>
                <forceTags>trueforceTags>
                
                <dockerDirectory>${project.basedir}/src/main/dockerdockerDirectory>
                
                <buildArgs>
                    <JAR_FILE>${project.build.finalName}.jarJAR_FILE>
                buildArgs>
                
                <resources>
                    <resource>
                        <targetPath>/targetPath>
                        <directory>${project.build.directory}directory>
                        <include>${project.build.finalName}.jarinclude>
                    resource>
                resources>
            configuration>
            <dependencies>
                <dependency>
                    <groupId>javax.activationgroupId>
                    <artifactId>activationartifactId>
                    <version>1.1.1version>
                dependency>
            dependencies>
        plugin>
    plugins>
    
    <resources>
        <resource>
            <directory>src/main/resourcesdirectory>
            
            <filtering>truefiltering>
        resource>
    resources>
build>

2.2 配置Jenkins

2.2.1 创建项目部署脚本

Jenkins 整合 Docker 自动化部署_第3张图片

2.2.2 选择构建自由风格项目

Jenkins 整合 Docker 自动化部署_第4张图片

2.2.3 General - 丢弃旧的构建历史,节省磁盘空间

Jenkins 整合 Docker 自动化部署_第5张图片

2.2.4 源码管理 - 配置Git代码地址

1,配置Git地址(SSH)

2,配置账号密码

3,配置代码分支

Jenkins 整合 Docker 自动化部署_第6张图片

2.2.5 源码管理 - 高级克隆行为

Jenkins 整合 Docker 自动化部署_第7张图片

Jenkins 整合 Docker 自动化部署_第8张图片

2.2.6 Build Steps - 调用顶层 Maven 目标

Jenkins 整合 Docker 自动化部署_第9张图片

2.2.6.1 编译依赖项目

如果当前项目依赖了本地其他项目,则需要先打包依赖项目,没有则跳过此步骤

目标:clean install -pl rely-project-name -am

POM:${WORKSPACE}/rely-project-name/pom.xml

注:依赖项目的pom文件位置

Jenkins 整合 Docker 自动化部署_第10张图片

2.2.6.2 打包部署项目

前提:此步骤需要目标服务器上的Docker进行过新增用户组操作和开发2375端口操作

目标: clean package -Pdev -DdockerHost=ip docker:build

注:-P 代表走不同的配置环境(非必须)

POM:${WORKSPACE}/project-name/pom.xml

注:打包项目的pom文件位置

Jenkins 整合 Docker 自动化部署_第11张图片

2.2.7 Build Steps - Execute shell script on remote host using ssh

在目标部署服务器上将代码打包成镜像,并启动为容器

1,配置SSH账号密码

2,Docker启动容器命令

-p 端口设置需要与DockerFile文件设置一致

-d 镜像名称需要与本地项目pom文件中配置的一致

Jenkins 整合 Docker 自动化部署_第12张图片

docker stop  project-center
echo '----stop container----'
docker rm  project-center
echo 'rm cont'
docker rmi `docker images | grep none | awk '{print $3}'`
echo '----rm none images----'
docker run  -it  --network=host    -p 8801:8801 --name  project-center -d project-category/project-name:1.0-SNAPSHOT 
echo '----start container----'
docker cp -L /usr/share/zoneinfo/Asia/Shanghai  project-center:/etc/localtime
docker cp -L /usr/share/zoneinfo/Asia/Shanghai  project-center:/etc/timezone
docker restart project-center

你可能感兴趣的:(Jenkins,jenkins,docker,自动化)