侧边栏壁纸
博主头像
分享你我博主等级

行动起来,活在当下

  • 累计撰写 114 篇文章
  • 累计创建 13 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

使用docker打包expo项目apk

管理员
2025-03-11 / 0 评论 / 0 点赞 / 8 阅读 / 4930 字

下面的配置是打包EXPO 51SDK配置
从git拉取打包

# docker build -t build-app-expo -f Dockerfile_git .

# docker run -it -e GIT_REPO_URL=gitee.com/retur0/expo.git -e GIT_USERNAME=youfak -e GIT_PASSWORD=your_password -e EXPO_TOKEN=your_token build-app-expo
FROM mobiledevops/android-sdk-image:30.0.3

# 切换到root用户以确保有权限更新和安装软件包
USER root

# 更新系统并安装 Node.js、JDK 17 和 git
RUN apt update && \
    apt install -y nodejs npm expect jq wget unzip curl git && \
    npm install -g n && \
    n stable && \
    apt install -y openjdk-17-jdk

# 安装 eas-cli 和 expo
RUN npm install -g eas-cli expo yarn

# Git仓库相关环境变量
ENV GIT_REPO_URL=""
ENV NODE_ENV=development
ENV GIT_USERNAME=""
ENV GIT_PASSWORD=""

# 创建工作目录
WORKDIR /WWW/APP

# 创建git克隆脚本
RUN echo '#!/usr/bin/expect -f' > /git-clone.exp && \
    echo 'set timeout -1' >> /git-clone.exp && \
    echo 'spawn git clone "https://$env(GIT_REPO_URL)" /WWW/APP/expo' >> /git-clone.exp && \
    echo 'expect "Username for*"' >> /git-clone.exp && \
    echo 'send "$env(GIT_USERNAME)\r"' >> /git-clone.exp && \
    echo 'expect "Password for*"' >> /git-clone.exp && \
    echo 'send "$env(GIT_PASSWORD)\r"' >> /git-clone.exp && \
    echo 'expect eof' >> /git-clone.exp && \
    chmod +x /git-clone.exp

# 创建启动脚本
RUN echo '#!/bin/bash' > /start.sh && \
    echo 'set -e' >> /start.sh && \
    echo 'if [ -z "$EXPO_TOKEN" ]; then' >> /start.sh && \
    echo '    echo "Error: EXPO_TOKEN is required"' >> /start.sh && \
    echo '    exit 1' >> /start.sh && \
    echo 'fi' >> /start.sh && \
    echo 'if [ -z "$GIT_USERNAME" ] || [ -z "$GIT_PASSWORD" ]; then' >> /start.sh && \
    echo '    echo "Error: GIT_USERNAME and GIT_PASSWORD are required"' >> /start.sh && \
    echo '    exit 1' >> /start.sh && \
    echo 'fi' >> /start.sh && \
    echo 'echo "Using NODE_ENV=$NODE_ENV"' >> /start.sh && \
    echo 'echo "Cleaning working directory..."' >> /start.sh && \
    echo 'rm -rf /WWW/APP/*' >> /start.sh && \
    echo 'echo "Cloning repository..."' >> /start.sh && \
    echo '/git-clone.exp || {' >> /start.sh && \
    echo '    echo "Failed to clone repository"' >> /start.sh && \
    echo '    echo "Please check your credentials and repository URL"' >> /start.sh && \
    echo '    exit 1' >> /start.sh && \
    echo '}' >> /start.sh && \
    echo 'echo "Current directory: $(pwd)"' >> /start.sh && \
    echo 'echo "Checking repository contents..."' >> /start.sh && \
    echo 'ls -la' >> /start.sh && \
    echo 'echo "Checking scripts directory..."' >> /start.sh && \
    echo 'ls -la scripts/' >> /start.sh && \
    echo 'echo "Installing dependencies..."' >> /start.sh && \
    echo 'yarn install' >> /start.sh && \
    echo 'echo "Starting build..."' >> /start.sh && \
    echo 'eas build --platform android --profile $NODE_ENV --local' >> /start.sh && \
    chmod +x /start.sh

ENTRYPOINT ["/start.sh"]

直接使用项目根目录打包

FROM mobiledevops/android-sdk-image:30.0.3

# 切换到root用户以确保有权限更新和安装软件包
USER root

# 更新系统并安装 Node.js 和 JDK 17
RUN apt update && \
    apt install -y nodejs npm expect jq wget unzip curl && \
    npm install -g n && \
    n stable && \
    apt install -y openjdk-17-jdk

# 安装 eas-cli 和 expo
RUN npm install -g eas-cli expo yarn

#项目ID
ARG EXPO_PROJECT_ID
ENV EXPO_PROJECT_ID=$EXPO_PROJECT_ID
# 接收登录凭据
ARG EXPO_TOKEN
ARG NODE_ENV
ENV EXPO_TOKEN=$EXPO_TOKEN
ENV NODE_ENV=$NODE_ENV

# 创建工作目录
WORKDIR /WWW/APP

# 安装依赖
RUN yarn install

CMD ["eas", "build", "--platform", "android", "--profile", "development", "--local"]

# 使用 build-app 作为服务名称 docker-compose up -d
#在根目录下创建一个 .env 文件 并写入以下内容
# EXPO_TOKEN=your_token # 访问 https://expo.dev/accounts/youfak/settings/access-tokens 获取EXPO_TOKEN
# EXPO_PROJECT_ID=your_project_id
# NODE_ENV=development
version: "3"
services:
  build:
    env_file:
      - .env
    build:
      context: .
      dockerfile: Dockerfile
      args:
        - EXPO_TOKEN=${EXPO_TOKEN}
        - EXPO_PROJECT_ID=${EXPO_PROJECT_ID}
        - NODE_ENV=${NODE_ENV}
    image: build-app
    container_name: rnApp
    tty: true
    stdin_open: true
    environment:
      - EXPO_TOKEN=${EXPO_TOKEN}
      - EXPO_PROJECT_ID=${EXPO_PROJECT_ID}
      - NODE_ENV=${NODE_ENV}
    volumes:
      - ./:/WWW/APP/

0

评论区