jenkins docker springCloud 持续集成构建

这两天搭建了jenkins docker部署环境,特此趁热做个笔记,在搭建jenkins环境之前,首先要在服务器安装一些必要得软件,
下面附上笔记

安装jdk

1.官网下载linux解压包 jdk-8u231-linux-x64.tar.gz
2.将包上传到linux服务器 root目录下
3.解压 tar -zxvf jdk-8u231-linux-x64.tar.gz -C /usr/local (解压到usr/local 目录下)
4.配置环境变量,vim /etc/profile 在文件末尾添加
export JAVA_HOME=/usr/local/jdk1.8.0_231

export PATH= P A T H : PATH: PATH:JAVA_HOME/bin

export CLASSPATH=.: J A V A H O M E / j r e / l i b / r t . j a r : JAVA_HOME/jre/lib/rt.jar: JAVAHOME/jre/lib/rt.jar:JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
5.刷新配置文件,立即生效 source /etc/profile
6。完成,java -version查看版本,若出现版本信息,执行7步
------解决linux下source /etc/profile关闭终端失效问题
7.关闭窗口,然后在进来执行java -version 看环境变量是否失效,若失效,在root家目录找到 .bashrc文件,配置环境变量,然后在执行source /etc/profile
然后java -version查看版本 ,若启效果,关掉窗口,进来再次执行java -version查看版本

安装maven

1.下载 wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz 到root目录
2.解压到usr/local 目录下 tar -zxvf apache-maven-3.6.1-bin.tar.gz -C /usr/local
3.vim etc/profile 配置环境变量添加
export MAVEN_HOME=/usr/local/apache-maven-3.6.1
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin: M A V E N H O M E / b i n ( 新 增 : MAVEN_HOME/bin (新增: MAVENHOME/bin:MAVEN_HOME/bin)
4.刷新配置文件,立即生效 source /etc/profile
5.mvn -v 查看maven版本,是否安装成功
6.在maven 安装目录下新建 mavenRepository目录作为maven本地仓库(解压目录下顺便给仓库权限 chmod 777 mavenRepository/ 不给权限仓库无法使用)
7.打开maven解压目录下conf下的settings.xml 中配置maven本地仓库 /usr/local/apache-maven-3.6.1/mavenRepository
8.配置阿里云仓库地址 标签中

alimaven

aliyun maven

http://maven.aliyun.com/nexus/content/groups/public/

central

安装git

1.,root目录执行下载,命令为: wget https://github.com/git/git/archive/v2.17.0.tar.gz
2.压缩包解压,命令为: tar -zxvf v2.17.0.tar.gz
3.安装编译源码所需依赖,命令为: yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker 耐心等待安装,出现提示输入y即可;
4.安装依赖时,yum自动安装了Git,需要卸载旧版本Git,命令为: yum remove git 出现提示输入y即可;
5.进入解压后的文件夹,命令 cd git-2.17.0 ,然后执行编译,命令为 make prefix=/usr/local/git all 耐心等待编译即可;
6.安装Git至/usr/local/git路径,命令为 make prefix=/usr/local/git install ;
7.打开环境变量配置文件,命令 vim /etc/profile ,在底部加上Git相关配置信息:
export PATH=$PATH:/usr/local/git/bin
8.刷新配置source /etc/profile
9…输入命令 git --version ,查看安装的git版本,校验通过,安装成功。
10.关联远程githup
git config --global user.name “liuyanjun”
git config --global user.email “953038659@qq.com”
git config --global core.autocrlf false
git config --global gui.encoding utf-8
ssh-keygen -t rsa -C “953038659@qq.com”
一路回车完成以后,将root/.ssh目录中的id_sra.pus中内容复制粘贴到githup settings中

安装Harbor 镜像仓库,需要先安装docker compose
执行:curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose
赋予执行权限:chmod +x /usr/local/bin/docker-compose
查看版本:docker-compose version 升级版本的话:先删除,在重新安装 sudo rm /usr/local/bin/docker-compose
接下来安装Harbor
将Harbor软件包上传到root目录
解压软件包:tar -zxvf 软件包 解压完成root家目录,会生成harbor 文件夹
然后在/usr/local/下创建 harbor目录,将root harbor目录下的文件转移过去,
mkdir harbor
root家目录执行:mv harbor/* /usr/local/harbor/
然后cd /usr/local/harbor/ 下
修改配置文件:harbor.yml 文件 更改 ip 和端口
执行:./prepare 安装harbor 所需要的镜像等。。。
完成之后,执行: ./install.sh 启动harbor
启动成功浏览器访问:ip加端口,默认账号 admin harbor12345

将harbor 追加到docker 可信任列表 修改 etc/docker/deamon.json ,以便之后下载,上传镜像
添加:{
“registry-mirrors”: [“https://t5pvs47y.mirror.aliyuncs.com”],
“insecure-registries”:[“harbor.io.chenhujia.com:2001”]
} 后面一行,前面是docker阿里镜像,修改完成,需要重启docker

安装jenkins

上传jenkins rpm包到root目录
rpm -ivh jenkins包进行安装

修改配置jenkin 用户名,默认为jenkins 和jenkins端口 在/etc/sysconfig/jenkins
如果不改用户名,需要在服务器创建jenkins用户
JENKINS_USER=“root”
JENKINS_PORT=“6000”

1.阿里安全组开发端口,
2.防火墙开放端口,
开启端口,再次执行执行firewall-cmd --permanent --zone=public --add-port=27017/tcp --permanent,提示success,
3.重启防火墙
重启防火墙,执行firewall-cmd --reload,提示success即执行成功

4.配置java 打开配置文件 /etc/rc.d/init.d/jenkins 将自己jdk的路径放进去 文件中搜索关键字“candidates”例如: /usr/local/jdk1.8.0_231/bin/java 到bin目录下的java,wq保存退出

5.执行 systemctl daemon-reload 刷新配置文件
6.执行 service jenkins start 启动jenkins 然后ip 端口访问 即可

友情提示启动报错: Job for jenkins.service failed because the control process exited with error code. See “systemctl status jenkins.service” and “journalctl -xe” for details.
原因:/etc/rc.d/init.d/jenkins 中读取不到java环境
至此安装完成

以上环境安装准备完成之后,访问jenkins ,密码根据首页提示到服务器找,然后登陆,可以选择推荐插件安装,嫌弃太慢得话,可以跳过

配置jenkin 镜像清华源

更改jenkins 清华大学源
cd /var/lib/jenkins/updates/
执行

sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

jenkins 管理页面,插件—》高级 ----最下面 升级站点 设置下面地址 清华大学源

http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

jenkin 配置

  1. 全局工具配置 配置jdk安装目录 /usr/local/jdk1.8.0_231 ,maven安装目录 /usr/local/apache-maven-3.6.2 注意!!!git配置坑:正确配置为:git 安装目录下面的bin目录下面的git 例如:/usr/local/git/bin/git

在这里插入图片描述

3.系统配置:全局属性:环境变量下配置:
JAVA_HOME /usr/local/jdk1.8.0_231
M2_HOME /usr/local/apache-maven-3.6.2
PATH+EXTRA $M2_HOME/bin

在这里插入图片描述

系统管理,Configure credentials ,全局凭据配置,从git拉取代码,需要jenkins和git 通过ssh或者账号密码得方式认证,进行拉取代码

全局凭证配置:用来拉取git代码采用ssh方式:将服务器git公钥拷贝到远程git服务器的ssh中,然后将私钥配置到jenkins中,在构建项目选择git方式,拉取代码的凭证
公钥:id_sra.pus 文件 私钥:id_rsa 文件

具体目录,在安装完git之后,公私腰会在root目录,.ssh文件夹下

在这里插入图片描述
在这里插入图片描述

配置Publish over SSH 远程发布需要通过ssh来与其他机器通信,所以配置

首先要安装插件 Publish over SSH

然后服务器配置ssh公钥,配置完成,在jenkins配置 ssh ,例如本例需要jenkins ssh 连接 本机器(jenkins所在机器,也需要配置ssh公钥,如果jenkins需要连接其他服务器,操作是一样的,具体操作如下)
1.在jenkins所在机器上执行:ssh-copy-id 服务ip (将公钥拷贝到对应的服务器,输入yes),然后在jenkins进行配置ssh,测试连接

将本机git 公钥发送至你需要连接得服务器

ssh-copy-id   服务ip

在这里插入图片描述

到这里jenkins 的配置基本上就ok 了
可以拉取代码了
点击新建项目,创建项目,拉取测试

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
贴上一个案例,harbor 的那个 atage 可以去掉,把sshPUblisher 写在一个干净的stage中
jenkins 远程连接,pull 报错
报错:ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [126]] 权限不足,给文件chmod +x /root/jenkins-shell/* 权限


node {
    stage('git拉取代码'){
        checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'git', url: '你自己的git地址']]])
    }

     stage('maven clean  install') {
                sh "mvn clean  install  -Dmaven.test.skip=true"
      }
     stage('启动容器'){
             //jenkins连接harbor凭证
             withCredentials([usernamePassword(credentialsId: '-492e-4aa5-b', passwordVariable: 'password', usernameVariable: 'username')]) {

             //ssh  连接
             sshPublisher(publishers: [sshPublisherDesc(configName: 'service', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/root/jenkins-shell/deploy.sh $harbor_url $tag", execTimeout: 12000000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

            }
      }
}

远程连接,执行shell脚本

#! /bin/sh
#接收外部参数
harbor_url=$1
tag=$2

echo "开始检测feynman-eureka容器是否存在"

#查询容器是否存在,存在则删除
containerId=`docker ps -a | grep -w feynman-eureka`
if [ "$containerId" !=  "" ] ; then
    #停掉容器
    docker stop feynman-eureka

    #删除容器
    docker rm feynman-eureka
	
	echo "成功删除容器"
fi

echo "开始启动feynman-eureka"
# 启动容器
docker run -d -p 3000:8761 --name feynman-eureka feynman-eureka:latest  

echo "feynman-eureka容器启动成功"




echo "开始检测feynman-gateway容器是否存在"

#查询容器是否存在,存在则删除
containerId=`docker ps -a | grep -w feynman-gateway`
if [ "$containerId" !=  "" ] ; then
    #停掉容器
    docker stop feynman-gateway

    #删除容器
    docker rm feynman-gateway
	
	echo "成功删除容器"
fi

echo "开始启动feynman-gateway"
# 启动容器
docker run -d -p 3001:3001 --name feynman-gateway feynman-gateway:latest  

echo "feynman-gateway容器启动成功"



echo "开始检测feynman-oauth2容器是否存在"

#查询容器是否存在,存在则删除
containerId=`docker ps -a | grep -w feynman-oauth2`
if [ "$containerId" !=  "" ] ; then
    #停掉容器
    docker stop feynman-oauth2

    #删除容器
    docker rm feynman-oauth2
	
	echo "成功删除容器"
fi

echo "开始启动"
# 启动容器
docker run -d -p 3333:3333  --name feynman-oauth2 feynman-oauth2:latest  

echo "feynman-oauth2容器启动成功"

#删除docker所有版本号为none的镜像
docker images|grep none|awk '{print $3}'|xargs docker rmi

echo "删除docker所有版本号为none的镜像"

maven 打包 构建镜像
maven pom配置


```java
 <build>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
  
                    <!-- 基础镜像jdk 1.8-->
                    <baseImage>java</baseImage>
                    <!-- 制作者提供本人信息 -->
                    <maintainer>yanjun.liu</maintainer>
                    <imageName>${project.artifactId}</imageName>
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!--切换到/ROOT目录 -->
                    <workdir>/ROOT</workdir>
                    <!--                    <cmd>["java", "-version"]</cmd>-->
                    <entryPoint>["java","-Duser.timezone=GMT+8", "-jar", "${project.build.finalName}.jar","--spring.profiles.active=pro"]</entryPoint>
                    <!--是否推送到docker私有仓库-->
                    <!--<pushImage>true</pushImage>-->
                    <!-- 指定 Dockerfile 路径 ${project.basedir}:项目根路径下,这是第二种方式需要配置的-->
                    <!--   <dockerDirectory>${project.basedir}</dockerDirectory>-->
                    <!--指定远程 docker api地址-->
                    <!--<dockerHost>http://ip:2375</dockerHost>-->
                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                    <resources>
                        <resource>
                            <targetPath>/ROOT</targetPath>
                            <!--用于指定需要复制的根目录,${project.build.directory}表示target目 录-->
                            <directory>${project.build.directory}</directory>
                            <!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包 后的jar包文件。-->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                    <!-- 以下两行是为了docker push到DockerHub使用的。maven xml中配置harbor的账号密码-->
                    <!--<serverId>docker-hub</serverId>-->
                    <!--<registryUrl>${docker.repostory}</registryUrl>-->
                </configuration>
                <!--maven package 自动构建镜像到服务器 -->
                <executions>
                    <execution>
                        <id>build-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                            <!--<goal>push</goal>-->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

最后效果,做个笔记,也希望可以帮助需要的人,自己做的时候,还是会遇到很多问题的,jenkins 的内容还是很多的,只能慢慢摸索了。。。。
``

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值