首页 > 其他分享 >Docker 安装 Jenkins 并实现项目自动化部署

Docker 安装 Jenkins 并实现项目自动化部署

时间:2022-10-09 22:46:47浏览次数:75  
标签:容器 自动化 https jenkins Jenkins Docker docker

Jenkins 是一款开源的持续集成(DI)工具,广泛用于项目开发,能提供自动构建,测试,部署等功能。作为领先的开源自动化服务器,Jenkins 提供了数百个插件来支持构建、部署和自动化任何项目。

这里主要介绍如何使用docker安装Jenkins,以及如何通过Jenkins pipeline实现自动化部署。

1. 安装Jenkins

直接下载最新的docker镜像安装即可,

docker run -p 8080:8080 -p 50000:50000 -d -v /var/run/docker.sock:/var/run/docker.sock -v jenkins_home:/var/jenkins_home my-jenkins-jdk11

这里需要注意几点:

  • 需要将宿主机的/var/run/docker.sock映射到容器中,这样在容器内只要向/var/run/docker.sock发送http请求就能和Docker Daemon通信了,如果容器内有docker文件,那么在容器内执行docker ps、docker port这些命令,和在宿主机上执行的效果是一样的,因为容器内和宿主机上的docker文件虽然不同,但是他们的请求发往的是同一个Docker Daemon;可以参考https://blog.csdn.net/boling_cavalry/article/details/92846483

  • 将容器内目录挂载到宿主机的目录,这样我们可以在宿主机上对文件的修改同步到容器内。

基本操作

查看Jenkins的日志:

docker logs myjenkins

重启容器可以使用:

docker stop 容器ID
docker start 容器ID

登录初始化Jenkins

在浏览器访问http://jenkins所在主机ip:8080,等待后出现如下界面,需要输入密码。

Xnip2022-10-09_20-57-01

可以查看宿主机/usr/local/jenkins/secrets/initialAdminPassword文件获取密码。

cat /usr/local/jenkins/secrets/initialAdminPassword

或者进入容器,查看/var/jenkins_home/secrets/initialAdminPassword文件获取密码。

# 进入容器
docker exec -it 容器ID /bin/bash
# 查看密码
cat /var/jenkins_home/secrets/initialAdminPassword

输入密码后,出现如下界面,任选一种方式均可。

配置镜像加速

打开宿主机 Jenkins 工作目录下的hudson.model.UpdateCenter.xml文件。

原始内容如下:

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://updates.jenkins.io/update-center.json</url>
  </site>
</sites>

url 修改为国内的清华大学官方镜像地址,最终内容如下:

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
  </site>
</sites>

重启 Jenkins 服务。

配置JDK Maven

可以参考博客:https://developer.aliyun.com/article/892646

2. 使用Jenkins Pipeline部署Docker程序

密钥配置

配置Docker Token

为了使Jenkins能够push docker image到dockerhub,必须配置对应的authentication token。可以直接在https://hub.docker.com/settings/security 登录后添加token即可,然后把token配置到Jenkins中,具体路径如下,选择类型为username/password。

image-20221009214701395

配置Github SSH key

在Jenkins用户下,生成一对ssh key,将公钥放到github,私钥配置到上面docker token同样的位置即可。这样在job中可以使用ssh从github clone code。注意如果首次连接提示

No ECDSA host key is known for github.houston.softwaregrp.net and you have requested strict checking.

可以采用下面的方法解决:

配置SSH登录

如果在Jenkins Pipeline中需要ssh到远程server,需要配置下ssh key,把生成好的public key放到远端server的authorized keys里面就行了。

Jenkins Pipeline

安装插件

安装Pipeline(https://plugins.jenkins.io/workflow-aggregator/)和stage view(https://plugins.jenkins.io/pipeline-stage-view/)插件。

新建Pipeline Job

安装好上述插件之后,新建一个Jenkins的pipeline Job,可以把所需要的Jenkinsfile放在项目的根目录下,这样就可以通过下面的选项来新建Pipeline Job了。关于Pipeline的更多内容,参考https://www.jenkins.io/zh/doc/book/pipeline/。

image-20221009220008817

定义好Pipeline并上传至Github

下面是一个pipeline的sample,里面包含4个步骤:

  • Maven Build:下载并且build整个maven project。
  • Docker Build:根据指定的Dockerfile build docker image。
  • Push Docker images:上传docker images。DOCKER_CREDENTIAL是前面指定的docker token的ID。
  • Deploy:这一步ssh到server上进行部署。
pipeline {
    agent any
    tools {
        maven 'maven-3.6.3'
    }
    environment {
        DATE = new Date().format('yy.M')
        TAG = "${DATE}.${BUILD_NUMBER}"
    }
    stages {
        stage ('Maven Build') {
            steps {
                sh 'mvn clean package -DskipTests'
            }
        }
        stage('Docker Build') {
            steps {
                script {
                    docker.build("king/my-work:${TAG}", "-f ./some/path/to/Dockerfile .")
                }
            }
        }
	    stage('Pushing Docker Image to Dockerhub') {
            steps {
                script {
                    docker.withRegistry('https://registry.hub.docker.com', 'DOCKER_CREDENTIAL') {
                        docker.image("king/my-work:${TAG}:${TAG}").push()
                        docker.image("king/my-work:${TAG}:${TAG}").push("latest")
                    }
                }
            }
        }
        stage('Deploy'){
            steps {
                sh 'scp -P some_port -r my_deploy [email protected]:test'
                sh 'ssh [email protected] "cd my_deploy && docker-compose up -d"'
            }
        }
    }
}

可能碰到的问题

  • 在docker容器中安装程序的问题:因为默认的jenkins用户没有权限安装程序, 可以使用root用户进入到docker container中进行安装。docker exec --user root -it jenkins bash

搜索『后端精进之路』关注公众号,立刻获取最新文章和价值2000元的BATJ精品面试课程

后端精进之路.png

标签:容器,自动化,https,jenkins,Jenkins,Docker,docker
From: https://www.cnblogs.com/way2backend/p/16773977.html

相关文章

  • @docker网络介绍
    docker网络介绍一、docker网络1、网络基础Docker本身的技术依赖于Linux内核虚拟化技术的发展。所以Docker对Linux内核的特性有很强的依赖。本章主要介绍Docker所......
  • 03@Dockerfile构建镜像
    文章目录​​Dockerfile构建镜像​​​​一、Dockerfile的简述​​​​二、Dockerfile使用参数(参数编写为大写)​​​​1、FROM​​​​2、MAINTAINER​​​​3、RUN​​​......
  • 02@Docker网络介绍及网络模式的使用
    文章目录​​Docker网络的介绍​​​​一、Docker网络原理​​​​1、docker网络介绍​​​​2、Docker网络原理​​​​二、docker网络基础​​​​【网络命名空间】​​​......
  • @Devops jenkins安装jenkins的项目构建详解
    文章目录​​Devops​​​​一、jenkins安装步骤​​​​1、安装jdk​​​​2、获取安装包​​​​3、安装​​​​4、配置文件修改​​​​5、启动jenkins​​​​6、浏览......
  • 《Spring Cloud与Docker微服务架构实战 》
     /*免责声明:全部内容都属于是段友分享,我只是属于整理。**/   /*  写在前边,个人觉得****弄一个积分下载,就是在自掘坟墓。表面上看起来是可以为个人赚积分,实际砍掉分享......
  • Jenkins——在流水线管道中使用指定的JDK
    前言如题,在流水线管道中使用指定的JDK内容通过在tools下来指定JDKstage('Build'){tools{jdk"JDK8u231"}steps{sh'/var/jenkin......
  • 乘风破浪,遇见云原生(Cloud Native)之Docker安装运行Nacos,更易于构建云原生应用的动态
    什么是Nacoshttps://nacos.iohttps://github.com/alibaba/nacosNacos通过提供简单易用的动态服务发现、服务配置、服务共享与管理等服务基础设施,帮助用户在云原生......
  • centos yum安装docker 步骤
    1、如果之前安装过docker需要进行卸载yumremovedocker2、安装必要的软件包,yum-util提供yum-config-manager功能yuminstall3、安装docker的devicemapper驱动依赖的软件包......
  • python linux上docker部署开发
    fastapi部署到linux上的docker上(打通开发到生产的环境部署问题,最便捷的方式就是用docker容器)目录:pyserver.pyrequirement.txtDockerfileDockerfileFROMpython:3.10ADD./p......
  • 使用docker-compose安装Prometheus
    Prometheus监控一、总览主要组件:Prometheusserver:用于收集和存储时间序列数据exporter:客户端生成监控指标Alertmanager:处理警报Grafana:数据可视化和输出Pushg......