Jenkins docker搭建并运行Docker build流水线(Jenkins 2.452.1)-java

3 篇文章 1 订阅
2 篇文章 0 订阅

1. 目标
  • 将Springboot代码通过Jenkins发布docker 镜像到harbor仓库中。
  • 以下全新安装系统,亲自一步一步记录,并完全验证通过。
2. 运行环境:
  • CentosOS:8.5.2111
  • Jenkins版本:2.452.1
  • Java::JDK17.0
  • Maven:3.9.7
3. 安装环境
  • 删除原有yum源,并加载aliyuan源
    rm -f /etc/yum.repos.d/*.repo
    curl -o  /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
  • 安装Docker
    • 增加docker源
      yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      
    • 安装docker
      yum install -y docker-ce 	
      
    • 启动并自动运行
      systemctl enable docker
      systemctl start docker
      
    • 验证dokcer
      docker -v
      
4. 安装Jenkins
  • 创建目录,用于容器映射到宿主机上;
    mkdir -p /myfiles/jenkins/home
    
  • 准备运行脚本:
    cd  /myfiles/jenkins
    vim run.sh
    
    输入以下:
    docker run -d --name jenkins -p 8080:8080 -p 50000:50000 --privileged=true \
    -v /run/docker.sock:/var/run/docker.sock \
    -v $(which docker):/usr/bin/docker \
    -v /myfiles/jenkins/home:/var/jenkins_home \
    jenkins/jenkins:lts
    
    修改其运行权限:
    chmod +x run.sh
    chmod 777 home
    
  • 直接运行:
    ./run.sh
    
  • 等待其pull完镜像
  • 检查运行状态
    docker ps -a
    
  • 授权docker目录权限
    chmod 777 /usr/bin/docker
    chmod 777 /run/docker.sock
    
  • 复制密钥:
    docker logs -f jenkins
    

以下就是登陆的密码,先复制下来。
在这里插入图片描述

  • 访问地址
    http://192.168.3.100:8080/
    输入复制的密码,并等待初始化
  • 插件,可以选择 “安装推荐的插件”。
  • 创建第一个用户
  • 安装完成。
5. 配置Jenkins
  • 配置java环境:
    • 安装 wget: yum -y install wget
    • 下载java:
      cd /myfiles/jenkins
      wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
      tar -xzvf jdk-17_linux-x64_bin.tar.gz
      mv jdk-17.0.11/ ./home/jdk17
      
    • 配置java环境:
    • Manage Jenkins -->Tools–>JDK 安装, 新增JDK(系统管理 -->全局工具配置)
      别名:jdk17
      JAVA_HOME:/var/jenkins_home/jdk17
  • 安装maven插件
    • 下载maven3.9.7:
      cd /myfiles/jenkins
      wget https://dlcdn.apache.org/maven/maven-3/3.9.7/binaries/apache-maven-3.9.7-bin.tar.gz
      tar -xzvf apache-maven-3.9.7-bin.tar.gz
      mv apache-maven-3.9.7 ./home/maven-3.9.7
      
    • 配置maven路径:Manage Jenkins -->Tools–>Maven 安装(系统管理 -->全局工具配置)
      点击“新增maven”,Name:mvn397; 注意名称要与后面jenkinsfile 中的 mvnHome = tool “mvn397” 一致
      去掉勾选自动安装
      MAVEN_HOME:/var/jenkins_home/maven-3.9.7
      配置setting路径:Manage Jenkins -->Tools–>Maven 配置
      默认 settings 提供:
      /var/jenkins_home/maven-3.9.7/conf/settings.xml
  • 安装docker插件
    路径:系统管理 -->插件管理–>Available plugins
    搜索:Docker Pipeline 点击安装;
    搜索:Docker plugin 点击安装
    重启:systemctl restart jenkins
  • 注意点,这里需要远程下载harbor,但是我的harbor没有ssl和域名,只有内网地址,所以需要增加安全限制,在 /usr/lib/systemd/system/docker.service 中的ExecStart 中增加 --insecure-registry 192.168.3.239 (harbor地址),增加后:
    ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.3.239  --containerd=/run/containerd/containerd.sock
    
6. java代码demo如下:
  • Dockerfile:
FROM openjdk:17.0.2-jdk
VOLUME /home/sh
ADD  ./target/demo-1.jar demo-1.jar
EXPOSE 8080
ENTRYPOINT exec java -jar  demo-1.jar
  • pom.xml
    <properties>
        <java.version>17</java.version>
        <imageName.pref>192.168.3.239/java</imageName.pref>
        <project.version.imageTag>0.1.0</project.version.imageTag>
    </properties>
    ..... 
    .....
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.13</version>
                <!--将插件绑定在某个phase执行-->
                <executions>
                    <execution>
                        <id>build-image</id>
                        <!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
                        <!--<phase>package</phase>-->
<!--                        <goals>-->
<!--                            <goal>build</goal>-->
<!--                        </goals>-->
                    </execution>
                </executions>

                <configuration>
                    <!--指定生成的镜像名,这里是我们的作者名+项目名-->
                    <repository>${imageName.pref}/${project.artifactId}</repository>
                    <!-- 指定 Dockerfile 路径-->
<!--                    <dockerInfoDirectory>${project.basedir}/</dockerInfoDirectory>-->
                    <tag>latest</tag>
                    <buildArgs>
                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>
  • jenkinsfile
node('built-in') {
    try{
        stage('Prepare') {
                echo "1.Prepare Stage"
                checkout scm
                servantName= "demo-1"
                profileEnv= "dev"
                docker_host = "192.168.3.239"
                img_name = "java/${servantName}"
                docker_img_name = "${docker_host}/${img_name}"
                echo "docker-img-name: ${docker_img_name}"
            }

            stage('Java And DockerImages Build') {
                echo "2.Java Build"
                mvnHome = tool "mvn397"
                settingPath = "${mvnHome}/conf/settings.xml"
                sh "${mvnHome}/bin/mvn -Dmaven.test.skip=true  clean install -Dmaven.test.skip=true  dockerfile:build"
            }

            stage('Push to Local Harbor') {
                echo "4.Push Docker Image Stage To Harbor"
                withCredentials([usernamePassword(credentialsId: 'docker-register-harbor', passwordVariable: 'DOCKER_PASSWORD', usernameVariable: 'DOCKER_USER')]) {
                    sh "echo ${DOCKER_PASSWORD} | docker login -u ${DOCKER_USER} --password-stdin ${docker_host}"
                    echo "docker login success!"
                    sh "docker push ${docker_img_name}:latest"
                    echo "docker push success!"
                    sh "docker rmi ${docker_img_name}:latest"
                }
            }
    }finally {
    }
}
  • 提交到Git仓库中 http://192.168.3.20:8080/demo/demo-1.git
7. 创建流水线
  • 先创建登录harbor登录凭证,目的使用流水线时,自动登录,push镜像

    • 路径:系统管理–>凭据管理,选择全局 下来,如图
      在这里插入图片描述
    • 注意下面的id,要与jenkinsfile的credentialsId一致
      在这里插入图片描述
  • 创建流水线:名称:demo、类型选择:流水线

  • 选择:git

  • 配置地址:http://192.168.3.20:8080/demo/demo-1.git

  • Credentials: 选择添加:

    • Domain:全局凭证;
    • 类型选择:Username with password
    • 如图:
      在这里插入图片描述
  • 脚本路径

./deploy/jenkinsfile
  • 保存
  • 如果按照上面的步骤,点击“立即构建”,都能成功构建并push到仓库
8. 总结

使用docker安装jenkins,需要再jenkins中安装docker插件,另外要注意将宿主机的/run/docker.sock和/usr/bin/docke设置权限,另外增加对harbor的安全限制。

9 可能出现的错误异常信息
  • Docker build 异常 java.io.IOException: Permission denied(同Could not build image)
  • Could not build image(参考第四点:授权docker目录权限)
  • [ERROR] Get “https://192.168.3.239/v2/”: dial tcp 192.168.3.239:443: connect: no route to host(解决方案:第五点,注意点已经说明)
  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值