完整ci流程 gitlab+jenkins+harbor
./data:/var/jenkins_home # jenkins:latest 的home目录,包括插件和配置等等。external_url 'http://192.168.31.88:30080' # web站点访问地址。- '30080:30080' # 注意宿主机和容器内部的端口要一致,否则external_url无法访问。hostname改为本机hostname或者本机IP,把http
·
目录
gitlab安装
docker-compose.yaml
version: '3.6' services: web: image: 'gitlab/gitlab-ce:latest' restart: always hostname: '192.168.31.88' environment: TZ: 'Asia/Shanghai' GITLAB_OMNIBUS_CONFIG: | external_url 'http://192.168.31.88:30080' # web站点访问地址 # Add any other gitlab.rb configuration here, each on its own line ports: - '30080:30080' # 注意宿主机和容器内部的端口要一致,否则external_url无法访问 - '30443:443' - '30022:22' volumes: - './config:/etc/gitlab' - './logs:/var/log/gitlab' - './data:/var/opt/gitlab' shm_size: '256m'
harbor安装
离线下载harbor-offline-installer-v2.5.6.tgz
hostname改为本机hostname或者本机IP,把http的端口改为自己想要映射的端口, 去掉https
cp harbor.yml.tmpl harbor.yml # vim harbor.yml hostname: 192.168.31.88 # http related config http: port: 9000 # https related config #https: # https port for harbor, default is 443 # port: 443 # The path of cert and key files for nginx # certificate: /your/certificate/path # private_key: /your/private/key/path
bash install.sh开始安装,账号/密码:admin/Harbor12345
修改/etc/docker/daemon.json
文件,添加下面一行:
{ "registry-mirrors": ["https://hub-mirror.c.163.com/"], "insecure-registries": ["192.168.31.88:9000"], "features": { "buildkit": true } }
重启容器
systemctl daemon-reload
systemctl restart docker
jenkins安装
docker-compose.yml
version: '3.6' services: jenkins: image: jenkins/jenkins:latest container_name: jenkins restart: always ports: - "18080:8080" - "50000:50000" volumes: - ./data:/var/jenkins_home # jenkins:latest 的home目录,包括插件和配置等等 - /var/run/docker.sock:/var/run/docker.sock - /usr/bin/docker:/usr/bin/docker - /etc/docker/daemon.json:/etc/docker/daemon.json
credentials
pluginManager
应用
Dockerfile文件
FROM maven:3.8.4-openjdk-17 as maven_build WORKDIR /app COPY pom.xml . COPY src ./src RUN --mount=type=cache,target=/root/.m2 mvn clean package -Dmaven.test.skip FROM openjdk:17-alpine COPY --from=maven_build /app/target/*.jar app.jar ENV PORT 8080 EXPOSE $PORT ENTRYPOINT ["java","-jar","/app.jar"]
Jenkinsfile文件
pipeline { agent any environment { APP_NAME = "demo" DOCKER_REGISTRY_URL = "http://192.168.31.88:9000" DOCKER_REGISTRY_PROJECT = "zliang" DOCKER_IMAGE_NAME = "${DOCKER_REGISTRY_PROJECT}/${APP_NAME}:${env.BUILD_ID}" } stages { stage('Build & Push docker image') { steps { script { def image = docker.build("${DOCKER_IMAGE_NAME}") docker.withRegistry("${DOCKER_REGISTRY_URL}", "harbor") { image.push() } } } } stage('Deliver for development') { when { expression { params.TARGET == 'dev' } } steps { script { withCredentials([usernamePassword(credentialsId: 'my-dev-host', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { deploy(params.TARGET, "192.168.31.88", USERNAME, PASSWORD) } } } } } } def deploy(target, host, user, password) { def remote = [:] remote.name = "ZLiang-PC" remote.host = host remote.user = user remote.password = password remote.allowAnyHosts = true remote.pty = true sshPut remote: remote, from: "./jenkins/scripts/deliver-for-${APP_NAME}-${target}.sh", into: '.' sshCommand remote: remote, command: "chmod +x ./deliver-for-${APP_NAME}-${target}.sh", sudo: true sshCommand remote: remote, command: "bash -c './deliver-for-${APP_NAME}-${target}.sh ${env.BUILD_ID}'" }
deliver-for-demo-dev.sh
#!/bin/bash APP_NAME="demo" DOCKER_REGISTRY_URL="192.168.31.88:9000" DOCKER_REGISTRY_PROJECT="zliang" DOCKER_IMAGE_NAME="${DOCKER_REGISTRY_URL}/${DOCKER_REGISTRY_PROJECT}/${APP_NAME}:$1" if docker inspect ${APP_NAME} >/dev/null 2>&1; then docker stop ${APP_NAME} docker rm ${APP_NAME} fi docker rmi "${DOCKER_IMAGE_NAME}" docker pull "${DOCKER_IMAGE_NAME}" docker run -idt --restart always --name ${APP_NAME} -p 9090:8080 "${DOCKER_IMAGE_NAME}"
Jenkins配置
更多推荐
已为社区贡献1条内容
所有评论(0)