jenkins部署和使用

242 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 官方教程页面 www.jenkins.io/doc/book/in…

1、docker部署

1、创建网络

docker network create jenkins
docker run \  
 --name jenkins-docker \  
 --restart=always \   
--detach \   
--privileged \   
--network jenkins \   
--network-alias docker \   
--env DOCKER_TLS_CERTDIR=/certs \   
--volume jenkins-docker-certs:/certs/client \  
--volume jenkins-data:/var/jenkins_home \   
--publish 2376:2376 \   
docker:dind \   
--storage-driver overlay2

--name jenkins-docker 指定用于运行映像的Docker容器名称。默认情况下,Docker将为容器生成唯一的名称。

--restart=always 开机启动。这里我自己改的,官方推荐--rm,没搞懂为什么,我觉得这很不合理

--detach 在后台运行Docker容器。稍后可以通过运行docker stop jenkins docker来停止此实例。

--privileged 在Docker中运行Docker当前需要特权访问才能正常运行。新的Linux内核版本可能会放宽这一要求。

--network jenkins 这与前面步骤中创建的网络相对应。

--network-alias docker 使Docker容器中的Docker作为jenkins网络中的主机名Docker可用。后面是jenkins要连这个

--env DOCKER_TLS_CERTDIR=/certs 允许在Docker服务器中使用TLS。由于使用了特权容器,建议这样做,但它需要使用下面描述的共享卷。此环境变量控制管理Docker TLS证书的根目录。

--volume jenkins-docker-certs:/certs/client 将容器内的/certs/client目录映射到上面创建的名为jenkins Docker certs的Docker卷。

--volume jenkins-data:/var/jenkins_home 将容器内的/var/jenkins主目录映射到名为jenkins data的Docker卷。这将允许由该Docker容器的Docker守护程序控制的其他Docker容器装载来自Jenkins的数据。

--publish 2376:2376 公开主机上的Docker守护程序端口。这对于在主机上执行docker命令以控制此内部docker守护程序非常有用。 这边也不需要映射,因为单独设置了网络

docker:dind 图像本身。在运行之前,可以使用命令:docker image pull docker:dind下载此图像。

--storage-driver overlay2 Docker卷的存储驱动程序。有关支持的选项,请参阅“Docker storage drivers”。

2、dockerfile

这里插件可以提前安装好自己需要的,避免后面每次还要重新安装,

FROM jenkins/jenkins:2.346.1-jdk11
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
  https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
  signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
  https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean:1.25.5 docker-workflow:1.28"

3、build

docker build -t myjenkins-blueocean:2.346.1-1 .

4、jenkins docker运行参数

docker run \
  --name jenkins-blueocean \
  --restart=on-failure \
  --detach \
  --network jenkins \
  --env DOCKER_HOST=tcp://docker:2376 \
  --env DOCKER_CERT_PATH=/certs/client \
  --env DOCKER_TLS_VERIFY=1 \
  --publish 8080:8080 \
  --publish 50000:50000 \
  --volume jenkins-data:/var/jenkins_home \
  --volume jenkins-docker-certs:/certs/client:ro \
  myjenkins-blueocean:2.346.1-1 

--name jenkins-blueocean 指定此 Docker 映像实例的 Docker 容器名称。

--restart=on-failure 如果容器停止,请始终重新启动容器。如果是手动停止的,只有在 Docker daemon 重启或者容器本身手动重启时才会重启。

--detach 在后台运行当前容器(即“分离”模式)并输出容器ID。如果不指定此选项,则此容器的运行 Docker 日志将在终端窗口中输出。

--network jenkins 将此容器连接到jenkins前面步骤中定义的网络。这使得上一步中的 Docker 守护程序可以通过 --env DOCKER_HOST=tcp://docker:2376 hostname 用于此 Jenkins 容器docker。

指定 、 和其他 Docker 工具用于连接到上一步中的 Docker 守护程序的环境docker变量docker-compose。

--publish 8080:8080 将当前容器的 8080 端口映射(即“发布”)到主机上的 8080 端口。第一个数字代表主机上的端口,最后一个数字代表容器的端口。因此,如果您指定-p 49000:8080了此选项,您将通过端口 49000 访问主机上的 Jenkins。

--publish 50000:50000 将当前容器的50000端口映射到宿主机的50000端口。仅当您在其他机器上设置了一个或多个入站 Jenkins 代理时才需要这样做,这些代理又与您的jenkins-blueocean容器(Jenkins“控制器”)交互。默认情况下,入站 Jenkins 代理通过 TCP 端口 50000 与 Jenkins 控制器通信。您可以通过配置全局安全 页面更改 Jenkins 控制器上的此端口号。如果您要将 Jenkins 控制器的入站 Jenkins 代理的 TCP 端口更改为 51000(例如),那么您需要重新运行 Jenkins(通过此 docker run …命令)并指定此“发布”选项,例如 --publish 52000:51000,其中最后一个值与 Jenkins 控制器上的此更改值匹配,第一个值是托管 Jenkins 控制器的机器上的端口号。入站 Jenkins 代理在该端口(本例中为 52000)上与 Jenkins 控制器通信。请注意,WebSocket 代理不需要此配置。

--volume jenkins-data:/var/jenkins_home 将容器中的目录映射到名称 /var/jenkins_home为 的 Docker 卷jenkins-data。除了将/var/jenkins_home目录映射到 Docker 卷之外,您还可以将此目录映射到计算机本地文件系统上的一个。例如,指定该选项会将容器的目录

--volume HOME/jenkins:/var/jenkinshome映射到本地计算机上目录中的子目录,通常是或。请注意,如果您为此更改源卷或目录,则需要更新来自上述容器的卷以匹配此内容。/var/jenkinshomejenkinsHOME/jenkins:/var/jenkins_home映射 到本地计算机上目录中的子目录 ,通常是 或。请注意,如果您为此更改源卷或目录,则需要更新来自上述容器的卷以匹配此内容。/var/jenkins_homejenkinsHOME/Users//jenkins/home//jenkinsdocker:dind

--volume jenkins-docker-certs:/certs/client:ro 将目录映射/certs/client到先前创建的 jenkins-docker-certs卷。这使得连接到 Docker 守护程序所需的客户端 TLS 证书在 DOCKER_CERT_PATH环境变量指定的路径中可用。

myjenkins-blueocean:2.346.1-1 您在上一步中构建的 Docker 映像的名称。

流水线脚本

pipeline{
    agent any
	environment {
		HARBOR_HOST = "192.168.50.221:8060"
		BUILD_VERSION = createVersion()
	}
	tools{

              maven 'maven368'
    }
    stages{
		stage("拉取代码"){
			//check CODE
			steps {
				git credentialsId: 'gitlab-jenkins', url: 'ssh://git@192.168.50.221:8022/omsp/demo.git'
			}
		}
		stage("maven构建"){
			steps {
				sh "mvn clean package -Dmaven.test.skip=true"
			}
		}
		stage("构建docker镜像,并push到harbor当中"){
			//docker push
			steps {
				sh '''
				    docker login -u admin -p Harbor12345 ${HARBOR_HOST}
					docker build -t demo:$BUILD_VERSION .
					docker tag demo:$BUILD_VERSION ${HARBOR_HOST}/omsp/demo:$BUILD_VERSION
					docker push ${HARBOR_HOST}/omsp/demo:$BUILD_VERSION
				'''
				
			}
		}
	}
}

def createVersion() {
    // 定义一个版本号作为当次构建的版本,输出结果 20201116165759_1
    return new Date().format('yyyyMMddHHmmss') + "_${env.BUILD_ID}"
}