当前位置:   article > 正文

【二】jenkins拉取gitee代码并生成镜像推送harbor_jenkins拉取git代码推送镜像

jenkins拉取git代码推送镜像

编写代码上传到gitee

我用fastapi写了一个简单的helloworld接口
代码链接:https://gitee.com/feiminjie/helloworld.git

jenkins拉取代码

这里直接流水线方法:
Jenkins中点击新建任务,输入名称,选择流水线,点击确定
先配置可以根据标签拉取代码。在general中勾选参数化构建过程(This project is parameterized),选择git参数
在这里插入图片描述
在代码中添加Jenkinsfile上传到gitee
在流水线中添加git信息,输入一下信息后,其他默认,最后脚本路径写Jenkinsfile,点击应用保存在这里插入图片描述 在这里插入图片描述
再点击流水线语法
在这里插入图片描述
选择好这个,然后配置好git信息,点击下面生成流水线脚本,然后复制生成的脚本,然后黏贴到git的jenkinsfile文件的步骤中。生成的语句中
在这里插入图片描述
master表示拉取最新的代码,但是我们希望通过tag拉取,所以改为${tag}。

复制流水线脚本,粘贴到Jenkinsfile中的steps中,文件的结果如下:

pipeline{
	// 制定任务在哪个集群节点中执行
	agent any

	// 声明全局变量,方便后面使用
	environment {
		key = 'value'
	}

	stages {
        	stage('拉取git仓库代码') {
            		steps {
        checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ee882b26-32f7-487f-af8b-8ce97ae6d923', url: 'https://gitee.com/feiminjie/helloworld.git']])
            		}
        	}
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

然后build一下,查看日志确认拉取成功

生成docker镜像

创建对应Dockerfile,我创建的如下:

# 基胐镜像
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9
# 设置工作目录
WORKDIR /app
# 复制项目女件到容器中
COPY ./requirements.txt /app
# 安装依赖项
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY . /app
# 暴露端口
EXPOSE 8000
# 运行命令
CMD ["gunicorn", "main:app", "-b", "0.0.0.0:8000", "-w", "4", "-k", "uvicorn.workers.UvicornWorker"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

写入后上传到git上,然后在jenkins任务中流水线语法出选择
在这里插入图片描述
复制流水线脚本粘贴到Jenkinsfile 中
这时Jenkinsfile内容为

pipeline{
	// 制定任务在哪个集群节点中执行
	agent any

	// 声明全局变量,方便后面使用
	environment {
		key = 'value'
	}

	stages {
        	stage('拉取git仓库代码') {
            		steps {
        checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ee882b26-32f7-487f-af8b-8ce97ae6d923', url: 'https://gitee.com/feiminjie/helloworld.git']])
            		}
        	}
        	stage('生成docker镜像') {
            		steps {
            		    sh 'docker build -t hello:$tag .'
            		}
        	}
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

配置jenkins推送到harbor

cd /var/run
# ll命令找到docker.sock,修改用户组和权限
chown root:root docker.sock
chmod o+rw docker.sock    # 注意如果服务器重启了需要重新设置
cd /usr/local/docker/jenkins_docker/
vi docker-compose.yml
# 修改docker-compose.yml 修改后的文件内容为
version: '3.1'
services:
  jenkins:
    image: 'jenkins/jenkins:2.426.3-lts'
    container_name: jenkins
    ports:
      - '8080:8080'
      - '50000:50000'
    volumes:
      - './data/:/var/jenkins_home/'
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
      - /etc/docker/daemon.json:/etc/docker/daemon.json
 # 修改后执行
 docker-compose up -d
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

在jenkins容易内部验证docker是否可行

docker exec -it jenkins bash
docker version # 输出版本信息
  • 1
  • 2

修改daemon.json,加入insecure-registries ip和端口为harbor的服务的ip和端口, 不然会报一个https的错误

cd /etc/docker
# 如果没有daemon.json则创建该文件,写入下面内容
{
  "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"],
  "insecure-registries": ["103.39.222.98:80"],
  "experimental": true
}

# 修改后重启docker
systemctl restart docker

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

然后在jenkins任务中流水线语法出选择
在这里插入图片描述

复制流水线脚本粘贴到Jenkinsfile 中
这时Jenkinsfile内容为

pipeline{
	// 制定任务在哪个集群节点中执行
	agent any

	// 声明全局变量,方便后面使用
	environment {
		key = 'value'
	}

	stages {
        	stage('拉取git仓库代码') {
            		steps {
        checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ee882b26-32f7-487f-af8b-8ce97ae6d923', url: 'https://gitee.com/feiminjie/helloworld.git']])
            		}
        	},
        	stage('生成docker镜像') {
            		steps {
            		    sh 'docker build -t hello:$tag .'
            		}
        	},
        	stage('推送harbor') {
            		steps {
            		    sh '''docker login -u admin -p Harbor12345 103.39.222.98:80
docker tag hello:$tag 103.39.222.98:80/repo/hello:$tag
docker push 103.39.222.98:80/repo/hello:$tag'''
            		}
        	}
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

jenkins中build一下该任务,查看执行任务是否成功,进harbor的repo项目中查看是否有镜像,走到这里应该是有的。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号