我正处于构建自动化管道的早期阶段。仍处于探索阶段。现在,我正在努力为要运行应用程序的容器设置环境变量。
我的想法是将我的环境变量设置为 GitHub Actions Secrets,并在运行 docker 容器命令时在容器中配置它们。该容器是由 Docker Composer 文件构建的。
现在,我的测试脚本(A)运行正常:
- name: Backend - Build Container (proof of concept)
run: |
BACKEND_CONTAINER_SH_SCRIPT="TEST_1='${{ secrets.TEST_1 }}' TEST_2='${{ secrets.TEST_2 }}' GITHUB_USER='${{ secrets.TEST_1 }}' GITHUB_REPO_NAME='${{ secrets.TEST_2 }}' docker-compose -f ss-build-files/ubuntu-container-build.yml up -d && docker-compose -f ss-build-files/ubuntu-container-build.yml logs; exit;";
ssh -v -t -t -i id_rsa_ssh_key_server_temp.pem -o StrictHostKeyChecking=no ubuntu@${{ env.CONFIG_SERVER_IP }} "$BACKEND_CONTAINER_SH_SCRIPT"
但是,我的想法是建立一个临时文件(ss-build-files/output-docker-compose-github-secrets.txt),它看起来像这样:
TEST_1='${{ secrets.TEST_1 }}' TEST_2='${{ secrets.TEST_2 }}' GITHUB_USER='${{ secrets.TEST_1 }}' GITHUB_REPO_NAME='${{ secrets.TEST_2 }}'
(它将根据 repo 中的密钥由节点文件动态构建)
问题是当我尝试将两者合并在一起时:
- name: Backend - Build Container (proof of concept)
run: |
BACKEND_CONTAINER_SH_SCRIPT="$(cat ss-build-files/output-docker-compose-github-secrets.txt) docker-compose -f ss-build-files/ubuntu-container-build.yml up -d && docker-compose -f ss-build-files/ubuntu-container-build.yml logs; exit;";
ssh -v -t -t -i id_rsa_ssh_key_server_temp.pem -o StrictHostKeyChecking=no ubuntu@${{ env.CONFIG_SERVER_IP }} "$BACKEND_CONTAINER_SH_SCRIPT"
因此,在我看来,这可以‘翻译’为:
BACKEND_CONTAINER_SH_SCRIPT="TEST_1='${{ secrets.TEST_1 }}' TEST_2='${{ secrets.TEST_2 }}' GITHUB_USER='${{ secrets.TEST_1 }}' GITHUB_REPO_NAME='${{ secrets.TEST_2 }}' docker-compose -f ss-build-files/ubuntu-container-build.yml up -d && docker-compose -f ss-build-files/ubuntu-container-build.yml logs; exit;";
容器构建成功,没有任何错误。当我进入容器调试环境值时,我得到了以下信息:
GITHUB_USER=${{ secrets.TEST_1 }}
GITHUB_REPO_NAME=${{ secrets.TEST_2 }}
(文字值)注意:完美运行的测试脚本(A)打印出正确的秘密值。
这个构造的命令中是否存在我遗漏的解析细节?我对 shell 脚本不是很熟悉。最好从这个文件中获取输出字符串ss-build-files/output-docker-compose-github-secrets.txt
。我可以灵活地更改输出中的详细信息(单引号、双引号、无引号)。
还有其他建议吗?即使这意味着要循环遍历密钥数组来构建此命令,TEST_1='${{ secrets.TEST_1 }}' TEST_2='${{ secrets.TEST_2 }}' GITHUB_USER='${{ secrets.TEST_1 }}' GITHUB_REPO_NAME='${{ secrets.TEST_2 }}'
以便它们能够反映正确的值。