这两天搭建了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 配置
- 全局工具配置 配置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 的内容还是很多的,只能慢慢摸索了。。。。
``