ToB企服应用市场:ToB评测及商务社交产业平台

标题: 24年最新 Docker安装jenkins并发布服务器,配置环境,最全,已乐成验证。 [打印本页]

作者: 惊落一身雪    时间: 2024-6-14 22:19
标题: 24年最新 Docker安装jenkins并发布服务器,配置环境,最全,已乐成验证。
Docker安装jenkins,配置环境,最全,已乐成验证。
1、如上安装jdk和maven,并配置etc/profile

2、配置jenkins

  1. docker pull jenkins/jenkins:2.346.1-lts
  2. #docker run -d -p 8080:8080 -p 50000:50000  --name jenkin jenkins/jenkins:2.346.1-lts
  3. docker run -d   --name jenkin jenkins/jenkins:2.346.1-lts
  4. mkdir -p /usr/docker/jenkins/jenkins_home
  5. docker cp jenkin:/var/jenkins_home /usr/docker/jenkins/jenkins_home
  6. ## 1000:1000: 表示新的所有者和所属组。在这个例子中,1000 是用户的标识号(UID),1000 是组的标识号(GID)。通常,这些标识号对应于系统中的用户和组。 请注意,1000 只是一个示例标识号。
  7. 而容器中jenkins用户的 uid 为 1000。
  8. chown -R 1000:1000 /usr/docker/jenkins
  9. chown -R 777 /usr/docker/jenkins
  10. chown 用于更改文件或目录的所有者和所属组。
  11. chmod 用于更改文件或目录的权限。
  12. docker rm -f jenkin
  13. #修改镜像源
  14. cd /usr/docker/jenkins/jenkins_home
  15. vim hudson.model.UpdateCenter.xml
  16. #将url内容修改为清华大学官方镜像
  17. https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
  18. 示例:
  19. <url>https://updates.jenkins.io/update-center.json</url>
  20. 替换成:
  21. <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
复制代码
3、文件夹权限
  1. 修改文件夹权限
  2. 需要修改下目录权限,因为当映射本地数据卷时,/data/jenkins_home/目录的拥有者为root用户,
  3. 而容器中jenkins用户的 uid 为 1000。
  4. 我们创建一个jenkins目录
复制代码
  1. chown -R 1000:1000 /usr/docker/jenkins
  2. docker rm -f jenkin
复制代码
  1. chmod -R 777 /usr/docker/jenkins
复制代码
3、启动容器

  1. docker run -u root -d -p 9095:8080 -p 50000:50000 \
  2. -v /usr/docker/jenkins/jenkins_home:/var/jenkins_home  \
  3. -v $(which docker):/bin/docker \
  4. -v /var/run/docker.sock:/var/run/docker.sock \
  5. -v /usr/local/java
  6. /jdk1.8.0_401:/usr/local/java
  7. \
  8. -v /usr/local/maven
  9. /apache-maven-3.9.6:/usr/local/maven
  10. \
  11. -v /etc/localtime:/etc/localtime \
  12. --name jenkins jenkins/jenkins
复制代码
4、获取登录密码


5、访问jenkins

本人云服务器所在:111.231.74.191
http://111.231.74.191:9095/
需要开放9095的端口
输入密码:之前获取的密码
28abb74d816b46818d0212d935df9e5a
创建用户
admin
3301359a
6、安装插件

保举新手安装。
然后再安装一些固定的插件
  1. Maven Integration : Maven 集成管理插件。
  2. Docker : Docker集成插件。
  3. GitLab : GitLab集成插件。
  4. Publish Over SSH:远程文件发布插件。
  5. SSH: 远程脚本执行插件。
  6. Git server:可以直接插件安装git,避免本地挂载的宝贝
  7. blue ocean:
  8. Deploy to container:
  9. dockerpip line:
  10. git param :
复制代码
7、使用若依项目作为前后端发布

1.后端

dockerfile

  1. # FROM java:8
  2. FROM anapsix/alpine-java:8_server-jre_unlimited
  3. # 将当前目录下的jar包复制到docker容器的/目录下
  4. COPY *.jar /app.jar
  5. # 运行过程中创建一个xx.jar文件
  6. RUN touch /app.jar
  7. ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
  8. ENV PARAMS="--spring.profiles.active=prod"
  9. # 声明服务运行在8080端口
  10. EXPOSE 8080
  11. # 指定docker容器启动时运行jar包
  12. ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /app.jar $PARAMS" ]
复制代码
jenkisfile

  1. pipeline{
  2.     agent any
  3.     environment {
  4.       IMAGE_NAME = "ruoyi-admin"
  5.       WS = "${WORKSPACE}"
  6.     }
  7.     //定义流水线的加工流程
  8.     stages {
  9.         //流水线的所有阶段
  10.         stage('1.环境检查'){
  11.             steps {
  12.                sh 'pwd && ls -alh'
  13.                sh 'printenv'
  14.                sh 'docker version'
  15.                sh 'java -version'
  16.                sh 'git --version'
  17.             }
  18.         }
  19.         stage('2.编译'){
  20.             agent {
  21.                 docker {
  22.                     image 'maven:3-alpine'
  23.                     args '-v maven-repository:/root/.m2'
  24.                  }
  25.             }
  26.             steps {
  27.                sh 'pwd && ls -alh'
  28.                sh 'mvn -v'
  29.                sh 'cd ${WS} && mvn clean package -s "/usr/local/maven
  30. /conf/settings.xml" -Dmaven.test.skip=true'
  31.             }
  32.         }
  33.         stage('3.打包'){
  34.             steps {
  35.                sh 'pwd && ls -alh'
  36.                sh 'echo ${WS}'
  37.                // sh 'mv ${WS}/${IMAGE_NAME}/target/*.jar ${WS}/${IMAGE_NAME}.jar && pwd && ls -alh && docker build -t ${IMAGE_NAME} .'
  38.                sh 'docker build -t ${IMAGE_NAME} -f Dockerfile ${WS}/${IMAGE_NAME}/target/'
  39.             }
  40.         }
  41.         stage('4.部署'){
  42.             // 删除容器和虚悬镜像
  43.             steps {
  44.                sh 'pwd && ls -alh'
  45.                sh 'docker rm -f ${IMAGE_NAME} || true && docker rmi $(docker images -q -f dangling=true) || true'
  46.                sh 'docker run -d -p 8888:8080 --name ${IMAGE_NAME} -v /mydata/logs/${IMAGE_NAME}:/logs/${IMAGE_NAME} ${IMAGE_NAME}'
  47.             }
  48.         }
  49.     }
  50. }
复制代码
redis

  1.   redis:
  2.     host: 111.231.74.191 # 地址
  3.     port: 6379 # 端口
  4.     database: 1 # 数据库索引
  5.     password: 123456 # 密码,建议生产环境开启
复制代码
创建数据库ry-vuw,执行初始化sql

2.前端配置

1、在前端项目ruoyi-ui中编写Dockerfile和Jenkinsfile两个文件, 并创建两个环境的nginx的配置文件(前端项目要在nginx中运行), 案例演示两个nginx的配置文件除了名字不同, 里面的内容是一雷同
Dockerfile

  1. FROM nginx:1.22
  2. # 构建参数,在Jenkinsfile中构建镜像时定义
  3. ARG PROFILE
  4. # 将dist文件中的内容复制到 `/usr/share/nginx/html/` 这个目录下面
  5. COPY dist/  /usr/share/nginx/html/
  6. # 用本地配置文件来替换nginx镜像里的默认配置
  7. COPY nginx/nginx-${PROFILE}.conf /etc/nginx/nginx.conf
  8. EXPOSE 80
  9. # 以前台形式持续运行
  10. CMD ["nginx", "-g", "daemon off;"]
复制代码
jenkinsfile

  1. pipeline{
  2.     agent any
  3.     environment {
  4.       // 镜像名称
  5.       IMAGE_NAME = "ruoyi-ui"
  6.       // 工作目录
  7.       WS = "${WORKSPACE}"
  8.       // 后台项目镜像名称
  9.       API_IMAGE_NAME = "ruoyi-admin"
  10.       // 自定义的构建参数
  11.       PROFILE = "prod"
  12.     }
  13.     //定义流水线的加工流程
  14.     stages {
  15.         //流水线的所有阶段
  16.         stage('1.环境检查'){
  17.             steps {
  18.                sh 'pwd && ls -alh'
  19.                sh 'printenv'
  20.                sh 'docker version'
  21.                sh 'git --version'
  22.             }
  23.         }
  24.         stage('2.编译'){
  25.             agent {
  26.                 docker {
  27.                     image 'node:12-alpine'
  28.                  }
  29.             }
  30.             steps {
  31.                sh 'pwd && ls -alh'
  32.                sh 'node -v'
  33.                sh 'cd ${WS} && npm install --registry=https://registry.npmmirror.com --no-fund && npm run build:prod'
  34.             }
  35.         }
  36.         stage('3.打包'){
  37.             steps {
  38.                sh 'pwd && ls -alh'
  39.                sh 'docker build --build-arg PROFILE=${PROFILE} -t ${IMAGE_NAME} .'
  40.             }
  41.         }
  42.         stage('4.部署'){
  43.             // 删除容器和虚悬镜像
  44.             steps {
  45.                sh 'pwd && ls -alh'
  46.                sh 'docker rm -f ${IMAGE_NAME} || true && docker rmi $(docker images -q -f dangling=true) || true'
  47.                sh 'docker run -d -p 8889:80 --name ${IMAGE_NAME} --link ruoyi-admin:ruoyi-admin ${IMAGE_NAME}'
  48.             }
  49.         }
  50.     }
  51. }
复制代码
nginx

  1. worker_processes  1;
  2. events {
  3.     worker_connections  1024;
  4. }
  5. http {
  6.     include       mime.types;
  7.     default_type  application/octet-stream;
  8.     sendfile        on;
  9.     keepalive_timeout  65;
  10.     server {
  11.         listen       80;
  12.         server_name  localhost;
  13.       location / {
  14.             root   /usr/share/nginx/html;
  15.          try_files $uri $uri/ /index.html;
  16.             index  index.html index.htm;
  17.         }
  18.       location /prod-api/{
  19.          proxy_set_header Host $http_host;
  20.          proxy_set_header X-Real-IP $remote_addr;
  21.          proxy_set_header REMOTE-HOST $remote_addr;
  22.          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  23.          #访问容器地址
  24.          proxy_pass http://ruoyi-admin:8080/;
  25.          #访问外网地址, 后台容器端口映射8888:8080
  26.          #proxy_pass http://47.114.186.174:8888/;
  27.       }
  28.         error_page   500 502 503 504  /50x.html;
  29.         location = /50x.html {
  30.             root   html;
  31.         }
  32.     }
  33. }
复制代码
8、将前后端两个项目上传到私人gitlab

gitlab安装:
上传过程忽略。这个比力简单。
ruoyi-ui
ruoyi
9、jenkins全局工具配置(这个过程可以忽略,貌似没用上)

1、maven配置

  1. /usr/local/maven
  2. /conf/setting.xml
复制代码

2、JDK安装

jdk配置 JAVA_HOME
1.使用jdk8

  1. /usr/local/java
复制代码

2.也可以使用默认的jdk11


3.输入以下命令进行docker自带的jdk的查找

  1. # which java
  2. /opt/java/openjdk/bin/java
复制代码

3、maven安装

  1. /usr/local/maven
复制代码
留意空格问题!!
4、docker安装

docker info
  1. Docker Root Dir: /var/lib/docker   
  2. ##将这个映射到docker路径
复制代码
  1. /usr/local/docker
  2. ##参考
  3. https://blog.csdn.net/yprufeng/article/details/136320990
  4. https://blog.csdn.net/weixin_43202160/article/details/134416447
复制代码
信息说明
  1. 在您提供的信息中,/usr/bin/docker 是 Docker 的可执行文件所在的位置,它通常被认为是 Docker 的安装目录。
  2. 虽然 /var/lib/docker 是 Docker 的根目录,其中包含 Docker 的数据、镜像和容器等,但一般情况下,/usr/bin/docker 被认为是 Docker 的可执行文件的安装路径。
  3. 请注意,具体的安装目录可能因不同的系统和安装方式而有所不同。上述解释是一般情况下的情况,具体结果可能会因不同的系统和配置而有所不同。如果您使用了特定的安装方式,请提供更多的详细信息以便我们给出更准确的答案。
复制代码
开启docker服务器的远程访问链接

在jenkins中配置该docker服务

可以了。要映射完成才行。

  1. harbor的参考地址:https://blog.51cto.com/wst021sh/7245687
复制代码
docker inspect OR

5、配置jenkins的体系配置


6、配置好构建后操作


会把SSH Server主动带入过来。
6.1、本机构建

  1. #执行shell
  2. APP_NAME=test-project
  3. APP_PORT=8083
  4. RUN_ENV=prod
  5. cd /var/jenkins_home/workspace/$APP_NAME
  6. docker stop $APP_NAME || true
  7. docker rm $APP_NAME || true
  8. docker rmi $APP_NAME || true
  9. docker build -f src/docker/Dockerfile -t $APP_NAME .
  10. docker run -d -p $APP_PORT:$APP_PORT -e "SPRING_PROFILES_ACTIVE=$RUN_ENV" --name $APP_NAME $APP_NAME:latest
复制代码
6.2、部署到指定服务器 jar包版本

  1. cd /data/test
  2. ps -ef | grep uht-sf-express-center-0.0.1-SNAPSHOT.jar  | grep -v grep | awk '{printf $2}' | xargs kill -9
  3. nohup java -jar uht-sf-express-center-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod > uht-sf-express-center.log 2>&1 &
复制代码
6.3、使用pipLine

https://www.cnblogs.com/juelian/p/17782048.html
pipeline语法

pipeline语法有两种

7、git配置

  1. http://111.231.74.191:9980//my-group/ruoyi.git
  2. root
  3. 3301359a
复制代码
8、配置下maven 环境变量

  1. docker cp /opt/etc/profile jenkins:/etc/profile
  2. 进入容器内
  3. source /etc/profile
  4. 修改/etc/profile
复制代码
9、远程服务器执行的脚本

  1. echo '================拉取最新镜像================'
  2. docker pull $docker_registry/docker_storage/$JOB_NAME
  3. echo '================删除清理容器镜像================'
  4. if [ -n  "$(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )" ]
  5. then
  6. #删除之前的容器
  7. docker rm -f $(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )
  8. fi
  9. # 清理镜像
  10. docker image prune -f
  11. echo '===============启动容器================'
  12. docker run -d   --net=host -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME $docker_registry/docker_storage/$JOB_NAME
复制代码
10、关键插件安装。

dockerpip line,Jenkinsfile 其中的agent docker需要用到。
11、开始配置项目

1.新建任务–多分支流水线


2.配置下git源


3.运行就可以了,乐成!!



tips:
  1. #要为其添加挂载卷(volume)
  2. docker container update --mount source=/host/path,target=/container/path,readonly=false container_name_or_id
复制代码
又是一个错误。
我的jenkins是docker部署的
需要在jenkins的容器里 执行以下命令访问git上的堆栈所在,把git的主机添加到/root/.ssh/known_hosts(执行命令前known_hosts这个文件是不存在的,执行后就有了)
  1. root@80b05f3c5097:~/.ssh# git ls-remote -h git@gitee.com:XXXXX/autotest.git HEAD
  2. The authenticity of host 'gitee.com (212.64.63.215)' can't be established.
  3. ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
  4. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
  5. Warning: Permanently added 'gitee.com,212.64.63.215' (ECDSA) to the list of known hosts.
  6. root@80b05f3c5097:~/.ssh#
  7. root@80b05f3c5097:~/.ssh#
  8. root@80b05f3c5097:~/.ssh# pwd
  9. /root/.ssh
  10. root@80b05f3c5097:~/.ssh# ls -al
  11. total 12
  12. drwx------ 2 root root 57 Oct 25 03:55 .
  13. drwx------ 1 root root 71 Sep 28 04:49 ..
  14. -rw------- 1 root root 2602 Oct 25 02:42 id_rsa
  15. -rw-r--r-- 1 root root 571 Oct 25 02:42 id_rsa.pub
  16. -rw-r--r-- 1 root root 444 Oct 25 03:55 ls
复制代码
然后jenkins就不报错了
ssh <用户名>@<节点服务器IP>
ssh root@<节点服务器IP>
ssh git@111.231.74.191:9922

  1. 1.先切换到jenkins用户下(此时在jenkins安装目录下)
  2. sudo su -s /bin/bash jenkins
  3. cd ~
复制代码
  1. ssh-keygen -m PEM -t rsa -f id_rsa
  2. # ssh-keygen -t rsa(这个不行)
复制代码


  1. cat .ssh/id_rsa.pub
  2. 或者
  3. cat id_rsa.pub
复制代码
  1. ssh://git@111.231.74.191:9922/my-group/ruoyi.git
  2. main
  3. http://111.231.74.191:9980/my-group/ruoyi.git
  4. root
  5. 3301359a
  6. gitlab
复制代码
maven配置的问题
  1. /usr/local/maven
  2. /conf/settings.xml
复制代码
package -s “/usr/local/maven
/conf/settings.xml” -Dmaven.test.skip=true’
10、终于乐成了!!走了一天的歪路。。。纯纯的一个人瞎琢磨。
然后就运行就行了。!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4