docker部署jenkins和jenkins的基本使用

docker部署jenkins和jenkins的基本使用

运行jenkins

sh 复制代码
docker pull jenkins/jenkins
docker run -d \
	-u root --privileged=true \
    -p 8080:8080 \
    -p 50000:50000 \
    -v /root/jenkins:/var/jenkins_home \
    -v /etc/localtime:/etc/localtime \
	-v /var/run/docker.sock:/var/run/docker.sock \
	-v /usr/bin/docker:/usr/bin/docker \
    --name=jenkins \
    jenkins/jenkins 

初始配置

设置中文

Manage Jenkins ->Manage Plugins -> 可选插件 -> 输入"Locale" -> 勾选并点击安装 -> http://主机ip:8080/restart" -> 重启;

重启后 -> Manage Jenkins -> Configure System -> Locale -> 输入"zh_CN" -> 点击保存和应用。

或者直接安装中文插件:搜索chinese。

安装插件

安装需要用到的插件。若安装插件较慢,可以更换源;若安装插件失败,可以尝试更换版本。

  • Maven Integration plugin: Maven 集成管理插件。
  • Docker plugin: Docker集成插件。
  • GitLab Plugin: GitLab集成插件。
  • Publish Over SSH:远程文件发布插件。
  • SSH: 远程脚本执行插件。

配置

系统管理 -> 全局工具配置 -> 找到Jdk、Git、Maven和docker。

配置好jdk、git、maven和docker的名称、路径等内容。

jdk容器中自带;git可以勾选自动安装;maven同样可以勾选自动安装;docker已经映射了本地的。

创建任务

构建jar

创建一个自由风格的软件项目 -> 填好git仓库地址和用户后 -> 添加maven构建,内容为"clean install -Dmaven.test.skip=true [-f pom.xml]" -> 保存 -> 点击build now即可开始自动拉取代码构建为jar包。

由于第一次构建去才会去自动下载maven,而maven的默认源很慢,可以先取消构建,修改为阿里的源后,在重新启动任务。

xml 复制代码
<mirror>
	<id>aliyunmaven</id>
	<mirrorOf>*</mirrorOf>
	<name>阿里云公共仓库</name>
	<url>https://maven.aliyun.com/repository/public</url>
</mirror>

构建容器

1、在项目中加上依赖:

xml 复制代码
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.4.13</version>
    <configuration>
        <!--镜像名称有三部分组成:<registry>/<repository>:<tag>,tag默认为latest-->
        <!--仓库名称-->
        <repository>${project.artifactId}</repository>
        <buildArgs>
            <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
    </configuration>
</plugin>

2、在pom.xml同级目录下添加Dockerfile文件。

sh 复制代码
# 设置JAVA版本
#FROM openjdk:8	#新版docker用这个
#FROM  java:8-alpine #旧版docker用这个,更轻量
#新版用java:8-alpine的方法:
FROM ningbiluoer/java-alpine
# 拷贝运行JAR包
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
# 设置JVM运行参数, 这里限定下内存大小,减少开销
ENV JAVA_OPTS="\
-server \
-Xms256m \
-Xmx512m \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m"
#空参数,方便创建容器时传参
ENV PARAMS=""
# 入口点, 执行JAVA运行命令
ENTRYPOINT java -jar $JAVA_OPTS /app.jar $PARAMS
# 通过脚本执行
#ENTRYPOINT ["/tmp/start.sh"]

3、创建自由风格项目,源码管理选择git,填上项目地址和凭证。

4、添加构建步骤,类型为Invoke top-level Maven targets:选择maven版本和填上目标内容为:

sh 复制代码
clean install -Dmaven.test.skip=true dockerfile:build [-f pom.xml]

注意:根据自己的实际代码路径配置

-Dmaven.test.skip=true 跳过测试

dockerfile:build 启动dockerfile插件构建容器

-f heima-leadnews-user/pom.xml 指定需要构建的文件(必须是pom)

5、添加构建步骤,类型为Execute shell

注:JOB_NAME为任务名称,由于构建出来的镜像名称被repository标签指定为了项目的artifactId,所以任务名称要和artifactId一样。

sh 复制代码
if [ -n  "$(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}')" ]
then
#删除之前的容器
docker rm -f $JOB_NAME
# 清理无用镜像
docker image prune -f 
docker run -d --net=host -e --name $JOB_NAME $JOB_NAME

# 启动docker服务
#docker run -d --net=host -e PARAMS="--spring.profiles.active=prod"  --name $JOB_NAME $JOB_NAME

CI/CD

前面两步和构建容器中的构建容器部分一样。

3、系统管理 -> 系统配置 -> SSH remote hosts

注:ssh添加不了凭据,需要先到 系统管理 -> credentials 里创建凭据,填上远程服务器的用户名和密码。

4、在General里勾选This project is parameterized,添加string类型的参数,名称为docker_registry,填上私有仓库的地址和端口。

5、创建自由风格项目,源码管理选择git,填上项目地址和凭证。

6、添加构建步骤,类型为Invoke top-level Maven targets:选择maven版本和填上目标内容为:

sh 复制代码
clean install -Dmaven.test.skip=true dockerfile:build [-f pom.xml]

7、添加构建步骤,类型为Execute shell

注:JOB_NAME为任务名称,由于构建出来的镜像名称被repository标签指定为了项目的artifactId,所以任务名称要和artifactId一样。

sh 复制代码
image_tag=$docker_registry/$JOB_NAME
echo '================docker镜像清理================'
if [ -n  "$(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}')" ]
then
#删除之前的容器
docker rm -f $JOB_NAME
fi
# 清理无用镜像
docker image prune -f 
# 创建TAG
docker tag $JOB_NAME $image_tag
echo '================docker镜像推送================'
# 推送镜像
docker push $image_tag
# 删除TAG
echo '================docker tag 清理 ================'
docker rmi $image_tag

8、添加构建步骤,类型为Execute shell script on remote host using ssh

sh 复制代码
echo '================拉取最新镜像================'
docker pull $docker_registry/$JOB_NAME

echo '================删除清理容器镜像================'
if [ -n  "$(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )" ]
then
#删除之前的容器
docker rm -f $JOB_NAME
fi
# 清理无用镜像
docker image prune -f 
echo '===============启动容器================'
docker run -d --net=host --name $JOB_NAME $docker_registry/$JOB_NAME

#echo '===============启动容器================'
#docker run -d   --net=host -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME $docker_registry/$JOB_NAME

官仓构建

使用官方仓库进行CI/CD。

步骤基本与上节CI/CD一样,第4步的参数名称改为version,值为版本号。

本地shell修改为:

登录官方账号时报错:WARNING! Using --password via the CLI is insecure. Use --password-stdin。该错旧版无,登录成功后,密码会经过base64编码保存在$HOME/.docker/config.json的auth属性中,使用该命令echo 'auth值' | base64 --decode即可看到明文密码。

sh 复制代码
image_name="chat"
image_tag="ningbiluoer/$image_name"
echo '================构建镜像================'
# 清理无用镜像
docker image prune -f 
# 创建TAG
docker tag $image_name $image_tag:$version
echo '================推送镜像================'
# 推送镜像(需先登录官方docker账号)
docker push $image_tag:$version
echo '================推送完成================'
docker rmi $image_tag:$version

远程shell改为:

sh 复制代码
image_name="chat"
image_tag="ningbiluoer/$image_name"
echo '================清理容器================'
if [ -n  "$(docker ps -a -f  name=$image_name  --format '{{.ID}}')" ]
then
#删除之前的容器
docker rm -f $image_name
#删除镜像
docker rmi $(docker images --filter=reference=$image_tag --format='{{.ID}}')
fi
# 清理无用镜像
docker image prune -f 
echo '================拉取镜像================'
docker pull $image_tag:$version
echo '===============启动容器================'
docker run -d -p 32380:32380 --name $image_name $image_tag:$version
相关推荐
汀、人工智能22 分钟前
修改Docker默认存储路径,解决系统盘占用90%+问题(修改docker root dir)
docker·容器
吃面不喝汤661 小时前
如何配置和使用自己的私有 Docker Registry
运维·docker·容器
Rookie_explorers1 小时前
Linux下go环境安装、环境配置并执行第一个go程序
linux·运维·golang
学习向前冲1 小时前
AD域控服务器
运维·服务器
Leighteen1 小时前
Docker常用命令
docker·容器
hgdlip1 小时前
查看ip地址的方法有几种?探索多样方法
运维·服务器·ip地址
丶21361 小时前
【Nginx】在 Docker 上安装 Nginx 的详细指南
运维·nginx·docker
神即道 道法自然 如来2 小时前
Jenkins怎么设置每日自动执行构建任务?
运维·jenkins
hanniuniu132 小时前
详细解读,F5服务器负载均衡的技术优势
运维·服务器·负载均衡
鱼饼6号2 小时前
Prometheus 上手指南
linux·运维·centos·prometheus