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
相关推荐
桂月二二4 小时前
Java与容器化:如何使用Docker和Kubernetes优化Java应用的部署
java·docker·kubernetes
007php0075 小时前
linux服务器上CentOS的yum和Ubuntu包管理工具apt区别与使用实战
linux·运维·服务器·ubuntu·centos·php·ai编程
人类群星闪耀时5 小时前
深度学习在灾难恢复中的作用:智能运维的新时代
运维·人工智能·深度学习
djykkkkkk5 小时前
ubuntu编译遇到的问题
linux·运维·ubuntu
LinkTime_Cloud5 小时前
GitLab 将停止为中国区用户提供服务,60天迁移期如何应对? | LeetTalk Daily
大数据·运维·gitlab
qq_429856575 小时前
linux 查看服务是否开机自启动
linux·运维·服务器
Smile丶凉轩6 小时前
Docker核心技术和实现原理
运维·docker·容器
清风细雨_林木木6 小时前
Docker使用——国内Docker的安装办法
运维·docker·容器
运维&陈同学6 小时前
【Kibana01】企业级日志分析系统ELK之Kibana的安装与介绍
运维·后端·elk·elasticsearch·云原生·自动化·kibana·日志收集
dessler7 小时前
Docker-Dockerfile讲解(三)
linux·运维·docker