• Docker+Jenkins(blueocean)+Gitee构建CICD流水线


    需求: 使用jenkins搭建流水线实现持续集成持续部署


    一、编写docker-compose.yml安装jenkins, jenkins的版本是带blueocean插件的版本

    1. version: '3'
    2. services:
    3. mysql:
    4. image: mysql:8.0.29
    5. container_name: mysql
    6. restart: always
    7. ports:
    8. - 3306:3306
    9. privileged: true
    10. environment:
    11. TZ: Asia/Shanghai
    12. MYSQL_ROOT_PASSWORD: 123456
    13. command:
    14. --default-authentication-plugin=mysql_native_password
    15. --character-set-server=utf8mb4
    16. --collation-server=utf8mb4_general_ci
    17. --explicit_defaults_for_timestamp=true
    18. --lower_case_table_names=1
    19. volumes:
    20. - /mydata/mysql/data/db:/var/lib/mysql #数据文件挂载
    21. - /mydata/mysql/data/conf:/etc/mysql/conf.d #配置文件挂载
    22. - /mydata/mysql/log:/var/log/mysql #日志文件挂载
    23. redis:
    24. image: redis:7
    25. container_name: redis
    26. restart: always
    27. command: redis-server --requirepass 1234566 --appendonly yes
    28. volumes:
    29. - /mydata/redis/data:/data
    30. - /etc/localtime:/etc/localtime:ro
    31. ports:
    32. - 6379:6379
    33. nginx:
    34. image: nginx:1.22
    35. container_name: nginx
    36. restart: always
    37. volumes:
    38. - /mydata/nginx/nginx.conf:/etc/nginx/nginx.conf #配置文件挂载
    39. - /mydata/nginx/html:/usr/share/nginx/html #静态资源根目录挂载
    40. - /mydata/nginx/log:/var/log/nginx #日志文件挂载
    41. - /etc/localtime:/etc/localtime:ro
    42. ports:
    43. - 80:80
    44. rabbitmq:
    45. image: rabbitmq:3.9-management
    46. container_name: rabbitmq
    47. restart: always
    48. ports:
    49. - 5672:5672
    50. - 15672:15672
    51. environment:
    52. TZ: Asia/Shanghai
    53. volumes:
    54. - /mydata/rabbitmq/data:/var/lib/rabbitmq #数据文件挂载
    55. - /etc/localtime:/etc/localtime:ro
    56. mongo:
    57. image: mongo:4
    58. container_name: mongo
    59. restart: always
    60. volumes:
    61. - /mydata/mongo/db:/data/db
    62. ports:
    63. - 27017:27017
    64. environment:
    65. TZ: Asia/Shanghai
    66. MONGO_INITDB_ROOT_USERNAME: root
    67. MONGO_INITDB_ROOT_PASSWORD: 123456
    68. command: --auth
    69. jenkins:
    70. image: jenkinsci/blueocean
    71. container_name: jenkins
    72. restart: always
    73. user: root
    74. ports:
    75. - 8080:8080
    76. - 50000:50000
    77. volumes:
    78. - /mydata/jenkins_home:/var/jenkins_home
    79. - /etc/localtime:/etc/localtime:ro
    80. - /var/run/docker.sock:/var/run/docker.sock

       在/mydata/jenkins_home目录配置maven的阿里源

    1. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    4. <pluginGroups>
    5. pluginGroups>
    6. <proxies>
    7. proxies>
    8. <servers>
    9. servers>
    10. <mirrors>
    11. <mirror>
    12. <id>nexus-aliyunid>
    13. <mirrorOf>centralmirrorOf>
    14. <name>Nexus aliyunname>
    15. <url>http://maven.aliyun.com/nexus/content/groups/publicurl>
    16. mirror>
    17. mirrors>
    18. <localRepository>/root/.m2localRepository>
    19. <profiles>
    20. <profile>
    21. <id>jdk-1.8id>
    22. <activation>
    23. <jdk>1.8jdk>
    24. activation>
    25. <properties>
    26. <maven.compiler.source>1.8maven.compiler.source>
    27. <maven.compiler.target>1.8maven.compiler.target>
    28. <maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
    29. properties>
    30. profile>
    31. profiles>
    32. settings>

    二、登录xxx:8080配置jenkins
      1、初始密码使用 docker logs jenkins 查看获取
      2、安装插件 Docker Pipeline, 后面构建流水线需要

      3、准备一个项目, 提交到Gitee

      创建两个文件 Jenkinsfile和Dockerfile

    1. pipeline{
    2. agent any
    3. environment {
    4. WS = "${WORKSPACE}"
    5. IMAGE_NAME = "java-devops-demo"
    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 "/var/jenkins_home/appconfig/maven/settings.xml" -Dmaven.test.skip=true'
    30. }
    31. }
    32. stage('3.打包'){
    33. steps {
    34. sh 'pwd && ls -alh'
    35. sh 'docker build -t ${IMAGE_NAME} .'
    36. }
    37. }
    38. stage('4.部署'){
    39. // 删除容器和虚悬镜像
    40. steps {
    41. sh 'pwd && ls -alh'
    42. sh 'docker rm -f ${IMAGE_NAME} && docker rmi $(docker images -q -f dangling=true)'
    43. sh 'docker run -d -p 8888:8080 --name ${IMAGE_NAME} -v /mydata/logs/${IMAGE_NAME}:/logs/${IMAGE_NAME} ${IMAGE_NAME}'
    44. }
    45. }
    46. }
    47. }
    1. FROM openjdk:8-jre-alpine
    2. # 将当前目录下的jar包复制到docker容器的/目录下
    3. COPY target/*.jar /app.jar
    4. # 运行过程中创建一个xx.jar文件
    5. RUN touch /app.jar;
    6. ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
    7. ENV PARAMS=""
    8. # 声明服务运行在8080端口
    9. EXPOSE 8080
    10. # 指定docker容器启动时运行jar包
    11. ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /app.jar $PARAMS" ]

      4、jenkins首页首页左侧的新建任务, 输入任务名称, 选择流水线

      4、配置流水线

       5、返回首页点击'打开 Blue Ocean'选择运行

     到此整体功能已经完成

    三、测试

    四、触发远程构建

       创建一个jenkins账号用来触发远程构建

     

     

  • 相关阅读:
    Spark安装教程
    nginx之keepalive详解与其配置
    健身耳机哪款好,几款适合健身的耳机分享
    做接口测试的目的以及测试点
    style=“width: ___“ VS width=“___“
    JavaScript的原型和继承
    分页查询与集合查询
    栈与队列c++算法练习
    【17. 双链表】
    web网页设计期末课程大作业 HTML+CSS+JavaScript重庆火锅(代码质量好)
  • 原文地址:https://blog.csdn.net/qq_39940205/article/details/126159330