一键创建社区开发基础设施

说明

本文档指导开发构建使用docker以及编排工具docker-compose一键创建社区开发所需要的基础设施,包括:

  1. jfrog cpp ce制品仓(conan包管理器和服务)
  2. jenkins流水线(用于openubmc构建流水线)
  3. nexus制品仓(用于apt、pip、npm源管理)
  • 本文档仅是示例,相关工具&软件的文档、授权以及后续的变更都以软件官方为准。
  • 本文不包含流水线实现、制品仓配置,后续补充。

环境准备

docker安装

Install Docker Engine on Ubuntu

# apt安装docker
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

docker-compose安装

docker-compose 是一个容器编排工具,官方文档 安装指导

# 快速安装命令
curl -SL https://github.com/docker/compose/releases/download/v2.33.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

容器编排

docker-compose.yml用以编排容器,将文件放置在/home/podman目录。

mkdir /home/podman -p
cd /home/podman
cat << EOF > ./docker-compose.yml
# yaml 配置实例
version: '3'
services:
  nginx:
    image: "swr.cn-north-4.myhuaweicloud.com/openubmc-test/nginx:alpine"
    restart: always
    ports:
      - "1080:80"
      - "1443:443"
    volumes:
      - /home/podman/nginx/ssl:/etc/nginx/ssl
      - /home/podman/nginx/conf.d:/etc/nginx/conf.d
      - /home/podman/nginx/www:/usr/share/nginx/html
    links:
      - jenkins
      - jfrog_conan
      - nexus_oss
  jenkins:
    image: swr.cn-north-4.myhuaweicloud.com/openubmc-test/jenkins:2.444
    restart: always
    volumes:
      - /home/podman/jenkins/:/var/jenkins_home
  nexus_oss:
    image: swr.cn-north-4.myhuaweicloud.com/openubmc-test/sonatype/nexus3:3.78.0
    restart: always
    volumes:
      - /home/podman/nexus_data:/nexus-data
  jfrog_conan:
    image: swr.cn-north-4.myhuaweicloud.com/openubmc-test/artifactory-cpp-ce:7.63.12
    restart: always
    volumes:
      - /home/podman/artifactory-cpp-ce:/var/opt/jfrog/artifactory
EOF

创建必要的目录

上述编排脚本需要映射几个目录,需要手工创建。

# 创建jenkins目录
mkdir /home/podman -p
cd /home/podman
mkdir jenkins
chown 1000:1000 jenkins
mkdir nexus_data
chown 200:200 nexus_data
mkdir artifactory-cpp-ce
chown 1030:1030 artifactory-cpp-ce

配置nginx访问jenkins

mkdir /home/podman -p
cd /home/podman
mkdir nginx/conf.d -p
# 创建nginx配置文件,注意将 jenkins.example.com 替换成真实域名
cat << EOF > nginx/conf.d/jenkins.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  jenkins.example.com;
    error_log /var/log/error.log warn;

    location / {
        client_max_body_size 200M;
        proxy_set_header    X-Forwarded-Port  $http_port;
        proxy_set_header    X-Forwarded-Proto $http_x_forwarded_proto;
        proxy_set_header    Host              $http_host;
        proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_pass http://jenkins:8080/;
    }
}
EOF

配置nginx访问nexus

mkdir /home/podman -p
cd /home/podman
mkdir nginx/conf.d -p
# 创建nginx配置文件,注意将 nexus.example.com 替换成真实域名
cat << EOF > nginx/conf.d/nexus.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  nexus.example.com;
    error_log /var/log/error.log warn;

    location / {
        client_max_body_size 200M;
        proxy_set_header    X-Forwarded-Port  $http_port;
        proxy_set_header    X-Forwarded-Proto $scheme;
        proxy_set_header    Host              $http_host;
        proxy_pass http://nexus_oss:8081/;
    }
}
EOF

配置nginx访问conan

mkdir /home/podman -p
cd /home/podman
mkdir nginx/conf.d -p
# 创建nginx配置文件,注意将 conan.example.com 和 conanui.example.com  替换成真实域名
cat << EOF > nginx/conf.d/conan.conf
server {
    listen       80;
    listen  [::]:80;
    server_name  conan.example.com;
    error_log /var/log/error.log warn;

    location / {
        client_max_body_size 200M;
        proxy_set_header    X-JFrog-Override-Base-Url $https://$host;
        proxy_set_header    X-Forwarded-Port  $http_port;
        proxy_set_header    X-Forwarded-Proto $http_x_forwarded_proto;
        proxy_set_header    Host              $http_host;
        proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_pass http://jfrog_conan:8081/;
    }
}

server {
    listen       80;
    listen  [::]:80;
    server_name  conanui.example.com;
    error_log /var/log/error.log warn;

    location / {
        client_max_body_size 200M;
        proxy_set_header    X-JFrog-Override-Base-Url $https://$host;
        proxy_set_header    X-Forwarded-Port  $http_port;
        proxy_set_header    X-Forwarded-Proto $http_x_forwarded_proto;
        proxy_set_header    Host              $http_host;
        proxy_set_header    X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_pass http://jfrog_conan:8082/;
    }
}
EOF

配置域名

nginx配置了多个域名,需要开发者做好域名解析,如果无法修改域名或者没有域名,可以修改hosts文件提供本地化解析。

  1. windows请参考 windows修改host
  2. linux请修改/etc/hosts

启动容器

cd /home/podman
# 后台运行
docker-compose up -d
# 或者前台运行
docker-compose up